IDENTIFICAÇÃO
Título do plano de trabalho: Controle de qualidade dos dados da temperatura do ar, para as estações meteorológicas automáticas do INMET na região sul do Brasil
Nome do bolsista: Jonas Barboza Corrêa
Nome do orientador: Jônatan Dupont Tatsch
Local de execução: Laboratório de Hidrometeorologia (LHMet - UFSM)
1. INTRODUÇÃO
As observações meteorológicas (e relacionadas ambientais e geofísicas) são feitas por uma variedade de razões. Eles são usados para a preparação em tempo real de análises meteorológicas, previsões e advertências meteorológicas severas, para o estudo do clima, para operações locais dependentes do clima (por exemplo, operações locais de vôo de aeródromo, trabalhos de construção em terra e no mar), para hidrologia e meteorologia agrícola, e para pesquisa em meteorologia e climatologia (WMO, 2012).
Nos últimos anos, a automação da estação e o aumento das velocidades de transmissão de dados estão em progresso constante. É necessário um controle de qualidade rápido e efetivo para identificação e sinalização de erros ou observações suspeitas para proporcionar acesso rápido à informação e disseminação de observações confiáveis quanto possível aos usuários. Geralmente, os objetivos para o desenvolvimento de sistemas de controle de qualidade são os seguintes: tornar o controle de qualidade mais eficaz e mais próximo do tempo real; identificar erros de calibração, medição e comunicação tão próximos da fonte de observação quanto possível; focar no desenvolvimento automático de algoritmos de controle de qualidade; desenvolver um sistema abrangente de sinalização para indicar o nível de qualidade dos dados; para facilitar aos usuários de dados identificar dados suspeitos e errados e destacar os valores corrigidos (VEJEN et al., 2002). Entre os principais tipos de erros, encontram-se os erros aleatórios, os erros sistemáticos, erros grandes e os erros micrometeorológicos.
Os erros aleatórios são distribuídos de forma mais ou menos simétrica em torno de zero e não dependem do valor medido. Erros aleatórios, por vezes, resultam em superestimação e às vezes em subestimação do valor real. Em média, os erros se cancelam mutuamente. Os erros sistemáticos, por outro lado, são distribuídos de forma assimétrica em torno de zero. Em média, esses erros tendem a polarizar o valor medido acima ou abaixo do valor real. Uma razão de erros aleatórios é uma deriva a longo prazo de sensores. Erros grandes (ásperos) são causados por mau funcionamento de dispositivos de medição ou por erros cometidos durante o processamento de dados; Os erros são facilmente detectados por cheques. Os erros micrometeorológicos (representatividade) são o resultado de perturbações em pequena escala ou sistemas meteorológicos que afetam a observação do tempo. Estes sistemas não são completamente observáveis pelo sistema de observação devido à resolução temporal ou espacial do sistema de observação. No entanto, quando tal fenômeno ocorre durante uma observação de rotina, os resultados podem parecer estranhos em comparação com as observações circundantes que ocorrem ao mesmo tempo (ZAHUMENSKÝ, 2004).
No Brasil, os dados fornecidos, em sua maioria, encontram-se em sua forma bruta, sem que a qualidade dos mesmos seja verificada. Este trabalho consiste em, através da aplicação de certos métodos de controle de qualidade (QC), verificar e rotular tais dados como suspeitos ou não, para que futuramente possam serem melhores aproveitados em seu uso, com um maior grau de confiabilidade.
2. METODOLOGIA
A metodologia adotada consiste em duas partes, inicialmente os dados brutos passarão por uma seleção inicial baseada em certos fatores, em seguida, eles serão submetidos à uma série de testes de controle de qualidade, que os qualificarão como suspeitos ou não, além, de obter-se certas informações relevantes a respeito deles.
2.1 SELEÇÃO DO PERÍODO DE DADOS
Neste trabalho, serão usados dados horários da Temperatura do Ar (Tar) de 91 Estações Meteorológicas Automáticas (EMAs) do Instituto Nacional de Meteorologia (INMET), localizadas na região sul do Brasil (Figura 01a). Ao todo, os estados do Paraná (PR), Rio Grande do Sul (RS) e Santa Catarina (SC), possuem, respectivamente, 27, 42 e 22 EMAs em funcionamento, tendo períodos de funcionamento que variam de pouco mais de um mês (A897 - Cambará do Sul), até mais de 16 anos (A801 - Porto Alegre) (Figura 01b). Os dados horários de Tar utilizados estão no padrão do Tempo Universal Coordenado (UTC).
O modelo dos sensores de temperatura usado é o QMH102 da fabricante Vaisala, estes possuem acurácia de ±0,2°C, e são instalados a uma altura de 2 metros acima do solo (VAISALA, 2002). Uma estação meteorológica automática (EMA) deve ser instalada em uma área gramada fechada com um cercado de tela metálica de 14m x 18m e um mínimo de \(50m^2\) livre de efeitos de construções ao seu redor e protegida contra roubo e vandalismos (INMET, 2011).
Figura 01 – (a) Localização das 91 EMAs do INMET no sul do Brasil, (b) Período de dados das 91 EMAs em anos. 
Dois critérios serão usados para a seleção dos dados que serão utilizados, (i) as estações meteorológicas automáticas devem terem no mínimo quatro anos de dados (podendo serem descontínuos), para haver um tempo mínimo para análise ser consistente, e (ii) o período de análise terá início em 01/01/2008, tendo como data final 31/12/2016. Este ano inicial foi escolhido, pois a partir dele notou-se um bom acrescimo na quantidade de EMAs existente (Figura 02), além de que, a distribuição espacial delas tornou-se mais homogênea (Figura 03 e Figura 04).
Figura 02 – EMAs com início de funcionamento pré-pós 2008 
Figura 03 – Disponibilidade mensal para cada uma das 91 EMA da região sul do Brasil.

Figura 04 – Evolução temporal mensal do número de EMAs.

Para que a seleção fosse feita, antes, foi necessário uma regularização das séries temporais de cada EMA, para assim garantir que todas tenham 24 horas em cada dia, e 365 (ou 366 dias, se ano bissexto) em cada ano.
Após a seleção, restaram ao todo 80 EMAs para análise, estando 24 localizadas no estado do Paraná (PR), 36 no estado do Rio Grande do Sul (RS) e 20 no estado de Santa Catarina (SC), com disponibilidade de dados variando de 41,5% (A883 - Ibirubá) até 99,4 (A803 - Porto Alegre) (Figura 05). Na Tabela 01 é mostrado as EMAs selecionadas que apresentaram o maior período de dados.
Figura 05 – Disponibilidade das 80 EMAs selecionadas do período de 2008 até 2016

Tabela 01 – Informações sobre as EMAs: Início de Funcionamento, Período, Latitude, Longitude, Altitude.
2.2 TESTES DE CONTROLE DE QUALIDADE
Os testes aplicados aos dados da temperatura do ar serão dividos em categorias, sendo elas: Limites do Intervalo de Variação, Persistência Temporal, Consistência Interna, Consistência Temporal, Consistência Espacial e Homogeneidade Temporal. Eles são mostrados na Tabela 02, e os dados foram considerados suspeitos quando os testes são válidos.
Tabela 02 – Controles de qualidade (QCs) aplicados aos dados da temperatura do ar das EMAs do INMET
| Processo de Validação |
Temperatura do Ar (em °C) |
Referências |
| _(QC1) Teste do Intervalo de Variação_ |
$(a)$ $T_{avg}$ < $-50°C$ ou $T_{avg}$ > $60°C$ |
[_(ESTÉVEZ el al., 2011)_](#ESTÉVEZ el al., 2011) |
| |
$(b)$ $T_{avg}$ < $T_{low}$ ou $T_{avg}$ > $T_{high}$ |
[_(ESTÉVEZ el al., 2011)_](#ESTÉVEZ el al., 2011) |
| _(QC2) Teste de Persistência Temporal_ |
$(a)$ $T_{avg} (h)$ = $T_{avg} (h-1)$ = $T_{avg} (h-2)$ = ... = $T_{avg} (h-n)$ |
[_(MEEK; HATFIELD, 1994)_](#MEEK; HATFIELD, 1994) |
| _(QC3) Teste de Consistência Interna_ |
$(a)$ $T_{min}(h)$ ≥ $T_{max}(h)$ |
[_(ESTÉVEZ el al., 2011)_](#ESTÉVEZ el al., 2011) |
| |
$(b)$ $T_{inst}(h)$ < $T_{min}(h)$ ou $T_{inst}(h)$ > $T_{max}(h)$ |
|
| |
$(c)$ $T_{avg}(h)$ < $T_{davg,f}(h)$ |
|
| |
$(d)$ $T_{avg}(d)$ < $T_{min}(d)$ ou $T_{avg}(d)$ > $T_{max}(d)$ |
[_(MEEK; HATFIELD, 1994)_](#MEEK; HATFIELD, 1994) |
| |
$(e)$ $T_{max}(d)$ < $T_{min}(d-1)$ |
[_(ESTÉVEZ el al., 2011)_](#ESTÉVEZ el al., 2011) |
| |
$(f)$ $T_{min}(d)$ ≥ $T_{max}(d-1)$ |
[_(ESTÉVEZ el al., 2011)_](#ESTÉVEZ el al., 2011) |
| _(QC4) Teste de Consistência Temporal_ |
$(a)$ $|T_{avg}(h)$ - $T_{avg}(h-dt)|$ > $T_{tol} (dt)$ |
[_(WMO, 1993)_](#WMO, 1993) |
| _(QC6) Teste de Regressão Esapcial_ |
$(a)$ $x' - fs'$ > $T_{avg}(d)$ > $x' + fs'$ |
[_(FALLAHNEZHAD, 2012)_](#FALLAHNEZHAD, 2012) |
Nota: \(T_{avg}(h)\) é a média aritmética simples de \(T_{min}(h)\) (temperatura mínima do ar) e \(T_{max}(h)\) (temperatura máxima do ar); \(-50°C\) e \(60°C\) são, respectivamente, os limites mínimo e máximo instrumental; \(T_{low}\) e \(T_{high}\) são, respectivamente, os valores mínimo e máximo já registrados pela estação climatológica mais próxima de cada EMA; \(n\) é um número natural, correspondente à(s) hora(s) anteriores à \(T_{avg} (h)\); \(T_{min}(h)\) e \(T_{max}(h)\) são, respectivamente, os valores mínimo e máximo horário de temperatura; \(T_{inst}(h)\) é a temperatura instantânea do ar, que corresponde à média de um minuto de 12 valores de amostragens medidos a cada cinco segundos; \(T_{davg,f}(h)\) é a temperatura média do ponto de orvalho, filtrada apenas com dados que passaram nos testes ‘a’ e ‘b’ do QC3, aplicados para a variável \(T_{davg}(h)\) (temperatura média do ponto de orvalho horária); \(T_{avg}(d)\) é média aritmética simples das \(T_{avg}(h)\); \(T_{min}(d)\) é o menor valor de temperatura registrada no dia das \(T_{min}(h)\); \(T_{max}(d)\) é o maior valor de temperatura registrada no dia das \(T_{max}(h)\); \(T_{min}(d-1)\) é a temperatura mínima do dia anterior; \(T_{max}(d-1)\) é a temperatura máxima do dia anterior; \(dt\) são valores correspondentes a uma determinada hora, sendo eles: 1h, 2h, 3h, 6h e 12h; \(T_{tol} (dt)\) é um valor tolerável de temperatura, que varia com \(dt\), recebendo os seguintes valores respectivos: 4°C (1h), 7°C (2h), 9°C (3h), 15°C (6h) e 25°C (12h); \(x'\) é a estimativa não ponderada, obtida através do erro padrão de estimativa (s); \(s'\) é erro padrão ponderado da estimativa; \(f\) é uma constante de ajuste, cujo valor é 3.
3. RESULTADOS
# test_name <- 'Limites do Intervalo de Variação';
# test_type <- "daily";
# summary_link <- "../../jbc-ic/data_saves/summary_80.rds";
# #product3_link <- '../../jbc-ic/output/qc1a-summary-tavg-data-inmet-2008-2016-4yrs-south.rds'; # 0 suspect
# #product3_link <- '../../jbc-ic/output/qc4a-summary-tavg-12h-data-inmet-2008-2016-4yrs-south.rds'; # 1 suspect
# product3_link <- '../../jbc-ic/output/qc1b-summary-tavg-data-inmet-2008-2016-4yrs-south.rds'; ## 66 suspects
#
# rio::import(product3_link)
#
# df = bind_rows(
# rio::import(product3_link) %>% filter(site != 'A851'),
# rio::import(product3_link) %>% filter(site == 'A845') %>% mutate(site = "A851")) %>%
# arrange(desc(tot))
3.1 Limites do Intervalo de Variação (QC1)
(a) A aplicação do teste de Limites do Intervalo de Variação ‘a’ nas 80 EMAs selecionadas não gerou nenhuma EMA que apresentou dados considerados suspeitos.
(b) A aplicação do teste de Limites do Intervalo de Variação ‘b’ nas 80 EMAs selecionadas gerou 66 EMAs que apresentaram dados considerados suspeitos. A média da porcentagem de dados considerados suspeitos nesse teste foi 0.1006% (≈ 79 horas), e a EMA que apresentou a maior porcentagem de dados considerados suspeitos foi a A845 – Morro Da Igreja (Bom Jardim Da Serra) (SC), com 2.1872% (1726 horas) (Tabela 03).
Tabela 03 – EMAs com maior número de dados considerados suspeitos no teste QC1b em ordem decrescente.
Figura 06 – Distribuição espacial das EMAs com dados considerados suspeitos no teste QC1b.

3.2 Persistência Temporal (QC2)
(a) A aplicação do teste de Persistência Temporal ‘a’ nas 80 EMAs selecionadas gerou 80 EMAs que apresentaram dados considerados suspeitos. A média da porcentagem de dados considerados suspeitos nesse teste foi 4.6418% (≈ 3663 horas), e a EMA que apresentou a maior porcentagem de dados considerados suspeitos foi a A834 – Tramandaí (RS), com 9.446% (7454 horas) (Tabela 04).
Tabela 04 – EMAs com maior número de dados considerados suspeitos no teste QC2a em ordem decrescente.
Figura 07 – Distribuição espacial das EMAs com dados considerados suspeitos no teste QC2a.

3.3 Consistência Interna (QC3)
(a) A aplicação do teste de Consistência Interna ‘a’ nas 80 EMAs selecionadas gerou 80 EMAs que apresentaram dados considerados suspeitos. A média da porcentagem de dados considerados suspeitos nesse teste foi 0.1511% (≈ 119 horas), e a EMA que apresentou a maior porcentagem de dados considerados suspeitos foi a A851 – Itapoá (SC), com 0.6818% (538 horas) (Tabela 05).
Tabela 05 – EMAs com maior número de dados considerados suspeitos no teste QC3a em ordem decrescente.
Figura 08 – Distribuição espacial das EMAs com dados considerados suspeitos no teste QC3a.

(b) A aplicação do teste de Consistência Interna ‘b’ nas 80 EMAs selecionadas gerou 12 EMAs que apresentaram dados considerados suspeitos. A média da porcentagem de dados considerados suspeitos nesse teste foi 0.0062% (≈ 5 horas), e a EMA que apresentou a maior porcentagem de dados considerados suspeitos foi a A880 – Vacaria (RS), com 0.0558% (44 horas) (Tabela 06).
Tabela 06 – EMAs com maior número de dados considerados suspeitos no teste QC3b em ordem decrescente.
Figura 09 – Distribuição espacial das EMAs com dados considerados suspeitos no teste QC3b.

(c) A aplicação do teste de Consistência Interna ‘c’ nas 80 EMAs selecionadas gerou 45 EMAs que apresentaram dados considerados suspeitos. A média da porcentagem de dados considerados suspeitos nesse teste foi 0.0769% (≈ 61 horas), e a EMA que apresentou a maior porcentagem de dados considerados suspeitos foi a A845 – Morro Da Igreja (Bom Jardim Da Serra) (SC), com 1.0657% (841 horas) (Tabela 07).
Tabela 07 – EMAs com maior número de dados considerados suspeitos no teste QC3c em ordem decrescente.
Figura 10 – Distribuição espacial das EMAs com dados considerados suspeitos no teste QC3c.

(d) A aplicação do teste de Consistência Interna ‘d’ nas 80 EMAs selecionadas não gerou nenhuma EMA que apresentou dados considerados suspeitos.
(e) A aplicação do teste de Consistência Interna ‘e’ nas 80 EMAs selecionadas gerou 57 EMAs que apresentaram dados considerados suspeitos. A média da porcentagem de dados considerados suspeitos nesse teste foi 0.135% (≈ 4 dias), e a EMA que apresentou a maior porcentagem de dados considerados suspeitos foi a A807 – Curitiba (PR), com 0.6083% (20 dias) (Tabela 08).
Tabela 08 – EMAs com maior número de dados considerados suspeitos no teste QC3e em ordem decrescente.
Figura 11 – Distribuição espacial das EMAs com dados considerados suspeitos no teste QC3e.

(f) A aplicação do teste de Consistência Interna ‘f’ nas 80 EMAs selecionadas gerou 69 EMAs que apresentaram dados considerados suspeitos. A média da porcentagem de dados considerados suspeitos nesse teste foi 0.0908% (≈ 3 dias), e a EMA que apresentou a maior porcentagem de dados considerados suspeitos foi a A851 – Itapoá (SC), com 0.3954% (13 dias) (Tabela 09).
Tabela 09 – EMAs com maior número de dados considerados suspeitos no teste QC3f em ordem decrescente.
Figura 12 – Distribuição espacial das EMAs com dados considerados suspeitos no teste QC3f.

3.4 Consistência Temporal (QC4)
(a) Este controle de qualidade é divido em partes, de acordo com a variação horária da temperatura.
- Para 1 hora: A aplicação do teste de Consistência Temporal ‘a’ nas 80 EMAs selecionadas gerou 80 EMAs que apresentaram dados considerados suspeitos. A média da porcentagem de dados considerados suspeitos nesse teste foi 0.2705% (≈ 213 horas), e a EMA que apresentou a maior porcentagem de dados considerados suspeitos foi a A875 – General Carneiro (PR), com 2.0276% (1600 horas) (Tabela 10).
Tabela 10 – EMAs com maior número de dados considerados suspeitos no teste QC4a (1h) em ordem decrescente.
Figura 13 – Distribuição espacial das EMAs com dados considerados suspeitos no teste QC4a (1h).

- Para 2 hora: A aplicação do teste de Consistência Temporal ‘a’ nas 80 EMAs selecionadas gerou 80 EMAs que apresentaram dados considerados suspeitos. A média da porcentagem de dados considerados suspeitos nesse teste foi 0.3029% (≈ 239 horas), e a EMA que apresentou a maior porcentagem de dados considerados suspeitos foi a A875 – General Carneiro (PR), com 2.4838% (1960 horas) (Tabela 11).
Tabela 11 – EMAs com maior número de dados considerados suspeitos no teste QC4a (2h) em ordem decrescente.
Figura 14 – Distribuição espacial das EMAs com dados considerados suspeitos no teste QC4a (2h).

- Para 3 hora: A aplicação do teste de Consistência Temporal ‘a’ nas 80 EMAs selecionadas gerou 80 EMAs que apresentaram dados considerados suspeitos. A média da porcentagem de dados considerados suspeitos nesse teste foi 0.3767% (≈ 297 horas), e a EMA que apresentou a maior porcentagem de dados considerados suspeitos foi a A875 – General Carneiro (PR), com 3.1288% (2469 horas) (Tabela 12).
Tabela 12 – EMAs com maior número de dados considerados suspeitos no teste QC4a (3h) em ordem decrescente.
Figura 15 – Distribuição espacial das EMAs com dados considerados suspeitos no teste QC4a (3h).

- Para 6 hora: A aplicação do teste de Consistência Temporal ‘a’ nas 80 EMAs selecionadas gerou 72 EMAs que apresentaram dados considerados suspeitos. A média da porcentagem de dados considerados suspeitos nesse teste foi 0.1538% (≈ 121 horas), e a EMA que apresentou a maior porcentagem de dados considerados suspeitos foi a A875 – General Carneiro (PR), com 1.6778% (1324 horas) (Tabela 13).
Tabela 13 – EMAs com maior número de dados considerados suspeitos no teste QC4a (6h) em ordem decrescente.
Figura 16 – Distribuição espacial das EMAs com dados considerados suspeitos no teste QC4a (12h).

- Para 12 hora: A aplicação do teste de Consistência Temporal ‘a’ nas 80 EMAs selecionadas gerou 1 EMA que apresentou dados considerados suspeitos. A média da porcentagem de dados considerados suspeitos nesse teste foi 0.0013% (≈ 1 hora), e a EMA que apresentou a maior porcentagem de dados considerados suspeitos foi a A875 – General Carneiro (PR), com 0.0013% (1 hora) (Tabela 14).
Tabela 14 – EMAs com maior número de dados considerados suspeitos no teste QC4a (3h) em ordem decrescente.
3.6 Regressão Espacial (QC6)
(a) A aplicação do teste de Regressão Espacial ‘a’ nas 80 EMAs selecionadas gerou 70 EMAs que apresentaram dados considerados suspeitos. A média da porcentagem de dados considerados suspeitos nesse teste foi 0.0856% (≈ 3 dias), e a EMA que apresentou a maior porcentagem de dados considerados suspeitos foi a A842 – Nova Fátima (PR), com 0.365% (12 dias) (Tabela 15).
Tabela 15 – EMAs com maior número de dados considerados suspeitos no teste QC2a em ordem decrescente.
Figura 17 – Distribuição espacial das EMAs com dados considerados suspeitos no teste QC6a.

3.7 Resumo dos Resultados
3.7.1 Dados considerados suspeitos por EMA
Tabela 15 – Total absoluto de dados considerados suspeitos em cada EMA.
Nota: * total de dados horários suspeitos detectados nos testes qc1a, qc1b, qc2a, qc3a, qc3b, qc3c e qc4a (1h, 2h, 3h, 6h e 12h); ** total de dados diários suspeitos detectados nos testes qc3d, qc3e e qc3f.
Figura 17 – Distribuição espacial das EMAs com maior quantidade absoluta de dados (a) horários e (b) diários considerados suspeitos

3.7.2 Dados considerados suspeitos por QC
Tabela 16 – Total absoluto de dados considerados suspeitos em cada teste.
3.7.3 Dados considerados suspeitos por estado
Tabela 17 – Total absoluto de dados horários e diários considerados suspeitos por estado
Nota: * total de dados horários suspeitos detectados nos testes qc1a, qc1b, qc2a, qc3a, qc3b, qc3c e qc4a (1h, 2h, 3h, 6h e 12h); ** total de dados diários suspeitos detectados nos testes qc3d, qc3e e qc3f.
4. CONCLUSÃO
Somando os resultados dos testes, as estações que apresentaram o maior número de dados suspeitos nos testes horários foram: A875 – General Carneiro (PR) com 10895 horas, A845 – Morro Da Igreja/Bom Jardim da Serra (SC) com 8461 horas e A834 – Tramandaí (RS) com 7820 horas; nos testes diários foram: A807 – Curitiba (PR) com 27 dias, A851 – Italpóa (SC) com 22 dias e A824 – Icaraíma (PR) com 19 dias.
No geral, embora a maioria da estações meteorológicas automáticas tenham apresentado ao mínimo um teste onde foram detectados dados suspeitos, a porcentagem de dados suspeitos detectada em cada estação, em relação ao número total de horas de dados na mesma, é suficientemente pequeno.
5. REFERÊNCIAS BIBLIOGRÁFICAS
Carslaw, D. C. and K. Ropkins, (2012) openair — an R package for air quality data analysis. Environmental Modelling & Software. Volume 27-28, 52-61. https://cran.r-project.org/web/packages/openair/index.html
Edwin Thoen (2017). padr: Quickly Get Datetime Data Ready for Analysis. R package version 0.3.0. https://CRAN.R-project.org/package=padr
ESTÉVEZ, J. et al. Guidelines on validation procedures for meteorological data from automatic weather stations. Journal of Hydrology, p. 147, 2011. https://www.sciencedirect.com/science/article/pii/S0022169411001594
Garrett Grolemund, Hadley Wickham (2011). Dates and Times Made Easy with lubridate. Journal of Statistical Software, 40(3), 1-25. URL http://www.jstatsoft.org/v40/i03/.
Hadley Wickham, Romain Francois, Lionel Henry and Kirill Müller (2017). dplyr: A Grammar of Data Manipulation. R package version 0.7.4. https://CRAN.R-project.org/package=dplyr
H. Wickham. ggplot2: Elegant Graphics for Data Analysis. Springer-Verlag New York, 2009 https://cran.r-project.org/web/packages/ggplot2/index.html
Hadley Wickham (2017). scales: Scale Functions for Visualization. R package version 0.5.0. https://CRAN.R-project.org/package=scales
Hadley Wickham (2017). stringr: Simple, Consistent Wrappers for Common String Operations. R package version 1.2.0. https://CRAN.R-project.org/package=stringr
Hadley Wickham (2017). tidyverse: Easily Install and Load ‘Tidyverse’ Packages. R package version 1.1.1. https://CRAN.R-project.org/package=tidyverse
Hadley Wickham (2011). The Split-Apply-Combine Strategy for Data Analysis. Journal of Statistical Software, 40(1), 1-29. URL http://www.jstatsoft.org/v40/i01/.
Hao Zhu (2017). kableExtra: Construct Complex Table with ‘kable’ and Pipe Syntax. R package version 0.5.2. https://CRAN.R-project.org/package=kableExtra
INMET. Rede de Estações Meteorológicas Automáticas do INMET. NOTA TÉCNICA No. 001/2011/SEGER/LAIME/CSC/INMET, p. 4, 2011. http://www.inmet.gov.br/portal/css/content/topo_iframe/pdf/Nota_Tecnica-Rede_estacoes_INMET.pdf
MEEK, D. W.; HATFIELD, J. L. Data quality checking for single station meteorological databases. Agricultural and Forest Meteorology, p. 90-91, 1994. https://ac.els-cdn.com/0168192394900833/1-s2.0-0168192394900833-main.pdf?_tid=868c718a-0b8d-11e8-8581-00000aab0f26&acdnat=1517956491_41a505ab0f4dff5b801e7e33aab57b66
R Core Team (2017). R: A language and environment for statistical computing.** R Foundation for Statistical Computing, Vienna, Austria. https://www.R-project.org/
RStudio Team (2016). RStudio: Integrated Development for R. RStudio, Inc., Boston, MA. http://www.rstudio.com/
Robert J. Hijmans (2016). raster: Geographic Data Analysis and Modeling. R package version 2.5-8. https://CRAN.R-project.org/package=raster
Stefan Milton Bache and Hadley Wickham (2014). magrittr: A Forward-Pipe Operator for R. R package version 1.5. https://CRAN.R-project.org/package=magrittr
VAISALA. Automatic Weather Station MAWS301 INSTALLATION MANUAL. p. 66, 2002. http://www.eso.org/gen-fac/pubs/astclim/lachira/docs/Vaisala/User%20Guides/M010114en-B.pdf
VEJEN et al. Quality control of meteorological observations: Automatic Methods Used in the Nordic Countries. Norwegian Meteorological Institute, p. 11, 2002. https://pdfs.semanticscholar.org/a0cf/7f5585c0cacee67e72d5583fc1a1d1f4de25.pdf?_ga=2.65464238.1806094589.1521820545-91514076.1517953769
WMO. GUIDE ON THE GLOBAL DATA-PROCESSING SYSTEM, p. VI.21, 1993. https://library.wmo.int/pmb_ged/wmo_305_en.pdf
WMO. Guide to Meteorological Instruments and Methods of Observation, p. 1, 2012. https://library.wmo.int/pmb_ged/wmo_8_en-2012.pdf
Yihui Xie (2016). DT: A Wrapper of the JavaScript Library ‘DataTables’. R package version 0.2. https://CRAN.R-project.org/package=DT
Yihui Xie (2017). knitr: A General-Purpose Package for Dynamic Report Generation in R. R package version 1.17. https://cran.r-project.org/web/packages/knitr/index.html
ZAHUMENSKÝ, I. Guidelines on Quality Control Procedures for Data from Automatic Weather Stations. World Meteorological Organization, p. 3-4, 2004. https://www.wmo.int/pages/prog/www/IMOP/meetings/Surface/ET-STMT1_Geneva2004/Doc6.1(2).pdf
Fallahnezhad, MS. Practical Concepts of Quality Control, one chapter, In-Tech Open Press, December 19, 2012. http://www.intechopen.com/articles/show/title/new-models-of-acceptance-sampling-plans
Chung-hong Chan, Geoffrey CH Chan, Thomas J. Leeper, and Jason Becker (2018). rio: A Swiss-army knife for data file I/O. R package version 0.5.16. https://cran.r-project.org/web/packages/rio/index.html
LS0tCm91dHB1dDoKICAgaHRtbF9kb2N1bWVudDoKICAgICBkZl9wcmludDogcGFnZWQKICAgICB0b2M6IHllcwogICBwZGZfZG9jdW1lbnQ6CiAgICAgdG9jOiB5ZXMKICAgd29yZF9kb2N1bWVudDoKICAgICB0b2M6IHllcwogICBodG1sX25vdGVib29rOgogICAgIHRvYzogeWVzCi0tLQoKYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0UsIGV2YWw9RkFMU0V9CiMgUGFyYSBsaW5rYXIgcGFydGVzIGRlIHVtIHRleHRvIG5vIHJtYXJrZG93biwgdXNlIGlzc286CiMjIFtEZXNjcml0aW9uXSAoI2lkX25hbWUpCiMjIDxhIGlkID0gImlkX25hbWUiPiA8L2E+CgojIFBhcmEganVzdGlmaWNhciBwYXJ0ZXMgZGUgdW0gdGV4dG8gbm8gcm1hcmtkb3duLCB1c2UgaXNzbzoKIyMgPHAgc3R5bGU9J3RleHQtYWxpZ246IGp1c3RpZnk7Jz4KIyMgPC9wPgpgYGAKCgpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRX0KIyBMaW1wYW5kbyBhIMOhcmVhIGRlIHRyYWJhbGhvCnJtKGxpc3QgPSBscygpKQoKIyBUZW1wbyBVbml2ZXJzYWwgQ29vcmRlbmFkbwpTeXMuc2V0ZW52KFRaID0gIlVUQyIpCgojIFBhY290ZXMKcGFja3MgPC0gYygiZHBseXIiLCAicmlvIiwgImdncGxvdDIiLCAia2FibGVFeHRyYSIsICJrbml0ciIsICJsdWJyaWRhdGUiLCAibWFncml0dHIiLCAib3BlbmFpciIsICJwYWRyIiwgInNjYWxlcyIsInN0cmluZ3IiLCAidGlkeXZlcnNlIikgIyAicGx5ciIKCmVhc3lwYWNrYWdlczo6bGlicmFyaWVzKHBhY2tzKQpybShwYWNrcykKCiMgRU1BcyBTZWxlY2lvbmFkYXMKZW1hc19zZWwgPC0KICByaW86OmltcG9ydCgnLi4vLi4vamJjLWljL2RhdGFfc2F2ZXMvc3VtbWFyeV84MC5yZHMnKSAlPiUKICAjcmVhZFJEUygnLi4vLi4vamJjLWljL2RhdGFfc2F2ZXMvc3VtbWFyeV84MC5yZHMnKSAlPiUKICBkcGx5cjo6c2VsZWN0KHNpdGUsIHN0YXRlLCBuYW1lLCBzdGFydCwgcGVyaW9kLCBsYXQsIGxvbiwgYWx0KSAlPiUKICBhcnJhbmdlKHN0YXJ0LCBzaXRlKQoKIyBTY3JpcHRzCnNvdXJjZSgnLi4vUi9yZWxhdG9yaW9fZnVuLlInKQpzb3VyY2UoJy4uL1IvZ3JhbWFfcHNwaC5SJykKc291cmNlKCcuLi9SL2NyZWF0ZS5SJykKc291cmNlKCcuLi8uLi9qYmMtaWMvUi91dGlscy5SJykKCgojIFN1c3BlY3QgYnkKZGlyZWN0b3J5IDwtICIuLi8uLi9qYmMtaWMvb3V0cHV0LyIKCiMgTWV0YWRhZG9zCnN1bW1hcnlfbGluayA8LSAiLi4vLi4vamJjLWljL2RhdGFfc2F2ZXMvc3VtbWFyeV84MC5yZHMiCgpgYGAKCiMgPGZvbnQgc2l6ZT0iNCI+IF9fSURFTlRJRklDQcOHw4NPX18KCjxmb250IHNpemU9IjMiPgpfX1TDrXR1bG8gZG8gcGxhbm8gZGUgdHJhYmFsaG86X18KQ29udHJvbGUgZGUgcXVhbGlkYWRlIGRvcyBkYWRvcyBkYSB0ZW1wZXJhdHVyYSBkbyBhciwgcGFyYSBhcyBlc3Rhw6fDtWVzIG1ldGVvcm9sw7NnaWNhcyBhdXRvbcOhdGljYXMgZG8gSU5NRVQgbmEgcmVnacOjbyBzdWwgZG8gQnJhc2lsCgpfX05vbWUgZG8gYm9sc2lzdGE6X18KSm9uYXMgQmFyYm96YSBDb3Jyw6phCgpfX05vbWUgZG8gb3JpZW50YWRvcjpfXwpKw7RuYXRhbiBEdXBvbnQgVGF0c2NoCgpfX0xvY2FsIGRlIGV4ZWN1w6fDo286X18KTGFib3JhdMOzcmlvIGRlIEhpZHJvbWV0ZW9yb2xvZ2lhIChMSE1ldCAtIFVGU00pCgojIDxmb250IHNpemU9IjQiPiBfXzEuIElOVFJPRFXDh8ODT19fCgo8Zm9udCBzaXplPSIzIj4KPHAgc3R5bGU9J3RleHQtYWxpZ246IGp1c3RpZnk7Jz4KQXMgb2JzZXJ2YcOnw7VlcyBtZXRlb3JvbMOzZ2ljYXMgKGUgcmVsYWNpb25hZGFzIGFtYmllbnRhaXMgZSBnZW9mw61zaWNhcykgc8OjbyBmZWl0YXMgcG9yIHVtYSB2YXJpZWRhZGUgZGUgcmF6w7Vlcy4gRWxlcyBzw6NvIHVzYWRvcyBwYXJhIGEgcHJlcGFyYcOnw6NvIGVtIHRlbXBvIHJlYWwgZGUgYW7DoWxpc2VzIG1ldGVvcm9sw7NnaWNhcywgcHJldmlzw7VlcyBlIGFkdmVydMOqbmNpYXMgbWV0ZW9yb2zDs2dpY2FzIHNldmVyYXMsIHBhcmEgbyBlc3R1ZG8gZG8gY2xpbWEsIHBhcmEgb3BlcmHDp8O1ZXMgbG9jYWlzIGRlcGVuZGVudGVzIGRvIGNsaW1hIChwb3IgZXhlbXBsbywgb3BlcmHDp8O1ZXMgbG9jYWlzIGRlIHbDtG8gZGUgYWVyw7Nkcm9tbywgdHJhYmFsaG9zIGRlIGNvbnN0cnXDp8OjbyBlbSB0ZXJyYSBlIG5vIG1hciksIHBhcmEgaGlkcm9sb2dpYSBlIG1ldGVvcm9sb2dpYSBhZ3LDrWNvbGEsIGUgcGFyYSBwZXNxdWlzYSBlbSBtZXRlb3JvbG9naWEgZSBjbGltYXRvbG9naWEgKFtXTU8sIDIwMTJdKCNXTU8sIDIwMTIpKS4KPC9wPgoKPHAgc3R5bGU9J3RleHQtYWxpZ246IGp1c3RpZnk7Jz4KTm9zIMO6bHRpbW9zIGFub3MsIGEgYXV0b21hw6fDo28gZGEgZXN0YcOnw6NvIGUgbyBhdW1lbnRvIGRhcyB2ZWxvY2lkYWRlcyBkZSB0cmFuc21pc3PDo28gZGUgZGFkb3MgZXN0w6NvIGVtIHByb2dyZXNzbyBjb25zdGFudGUuIMOJIG5lY2Vzc8OhcmlvIHVtIGNvbnRyb2xlIGRlIHF1YWxpZGFkZSByw6FwaWRvIGUgZWZldGl2byBwYXJhIGlkZW50aWZpY2HDp8OjbyBlIHNpbmFsaXphw6fDo28gZGUgZXJyb3Mgb3Ugb2JzZXJ2YcOnw7VlcyBzdXNwZWl0YXMgcGFyYSBwcm9wb3JjaW9uYXIgYWNlc3NvIHLDoXBpZG8gw6AgaW5mb3JtYcOnw6NvIGUgZGlzc2VtaW5hw6fDo28gZGUgb2JzZXJ2YcOnw7VlcyBjb25macOhdmVpcyBxdWFudG8gcG9zc8OtdmVsIGFvcyB1c3XDoXJpb3MuIEdlcmFsbWVudGUsIG9zIG9iamV0aXZvcyBwYXJhIG8gZGVzZW52b2x2aW1lbnRvIGRlIHNpc3RlbWFzIGRlIGNvbnRyb2xlIGRlIHF1YWxpZGFkZSBzw6NvIG9zIHNlZ3VpbnRlczogdG9ybmFyIG8gY29udHJvbGUgZGUgcXVhbGlkYWRlIG1haXMgZWZpY2F6IGUgbWFpcyBwcsOzeGltbyBkbyB0ZW1wbyByZWFsOyAgaWRlbnRpZmljYXIgZXJyb3MgZGUgY2FsaWJyYcOnw6NvLCBtZWRpw6fDo28gZSBjb211bmljYcOnw6NvIHTDo28gcHLDs3hpbW9zIGRhIGZvbnRlIGRlIG9ic2VydmHDp8OjbyBxdWFudG8gcG9zc8OtdmVsOyBmb2NhciBubyBkZXNlbnZvbHZpbWVudG8gYXV0b23DoXRpY28gZGUgYWxnb3JpdG1vcyBkZSBjb250cm9sZSBkZSBxdWFsaWRhZGU7IGRlc2Vudm9sdmVyIHVtIHNpc3RlbWEgYWJyYW5nZW50ZSBkZSBzaW5hbGl6YcOnw6NvIHBhcmEgaW5kaWNhciBvIG7DrXZlbCBkZSBxdWFsaWRhZGUgZG9zIGRhZG9zOyBwYXJhIGZhY2lsaXRhciBhb3MgdXN1w6FyaW9zIGRlIGRhZG9zIGlkZW50aWZpY2FyIGRhZG9zIHN1c3BlaXRvcyBlIGVycmFkb3MgZSBkZXN0YWNhciBvcyB2YWxvcmVzIGNvcnJpZ2lkb3MgKFtWRUpFTiBldCBhbC4sIDIwMDJdKCNWRUpFTiBldCBhbC4sIDIwMDIpKS4gRW50cmUgb3MgcHJpbmNpcGFpcyB0aXBvcyBkZSBlcnJvcywgZW5jb250cmFtLXNlIG9zIGVycm9zIGFsZWF0w7NyaW9zLCBvcyBlcnJvcyBzaXN0ZW3DoXRpY29zLCBlcnJvcyBncmFuZGVzIGUgb3MgIGVycm9zIG1pY3JvbWV0ZW9yb2zDs2dpY29zLgo8L3A+Cgo8cCBzdHlsZT0ndGV4dC1hbGlnbjoganVzdGlmeTsnPgpPcyBlcnJvcyBhbGVhdMOzcmlvcyBzw6NvIGRpc3RyaWJ1w61kb3MgZGUgZm9ybWEgbWFpcyBvdSBtZW5vcyBzaW3DqXRyaWNhIGVtIHRvcm5vIGRlIHplcm8gZSBuw6NvIGRlcGVuZGVtIGRvIHZhbG9yIG1lZGlkby4gRXJyb3MgYWxlYXTDs3Jpb3MsIHBvciB2ZXplcywgcmVzdWx0YW0gZW0gc3VwZXJlc3RpbWHDp8OjbyBlIMOgcyB2ZXplcyBlbSBzdWJlc3RpbWHDp8OjbyBkbyB2YWxvciByZWFsLiBFbSBtw6lkaWEsIG9zIGVycm9zIHNlIGNhbmNlbGFtIG11dHVhbWVudGUuIE9zIGVycm9zIHNpc3RlbcOhdGljb3MsIHBvciBvdXRybyBsYWRvLCBzw6NvIGRpc3RyaWJ1w61kb3MgZGUgZm9ybWEgYXNzaW3DqXRyaWNhIGVtIHRvcm5vIGRlIHplcm8uIEVtIG3DqWRpYSwgZXNzZXMgZXJyb3MgdGVuZGVtIGEgcG9sYXJpemFyIG8gdmFsb3IgbWVkaWRvIGFjaW1hIG91IGFiYWl4byBkbyB2YWxvciByZWFsLiBVbWEgcmF6w6NvIGRlIGVycm9zIGFsZWF0w7NyaW9zIMOpIHVtYSBkZXJpdmEgYSBsb25nbyBwcmF6byBkZSBzZW5zb3Jlcy4gRXJyb3MgZ3JhbmRlcyAow6FzcGVyb3MpIHPDo28gY2F1c2Fkb3MgcG9yIG1hdSBmdW5jaW9uYW1lbnRvIGRlIGRpc3Bvc2l0aXZvcyBkZSBtZWRpw6fDo28gb3UgcG9yIGVycm9zIGNvbWV0aWRvcyBkdXJhbnRlIG8gcHJvY2Vzc2FtZW50byBkZSBkYWRvczsgT3MgZXJyb3Mgc8OjbyBmYWNpbG1lbnRlIGRldGVjdGFkb3MgcG9yIGNoZXF1ZXMuIE9zIGVycm9zIG1pY3JvbWV0ZW9yb2zDs2dpY29zIChyZXByZXNlbnRhdGl2aWRhZGUpIHPDo28gbyByZXN1bHRhZG8gZGUgcGVydHVyYmHDp8O1ZXMgZW0gcGVxdWVuYSBlc2NhbGEgb3Ugc2lzdGVtYXMgbWV0ZW9yb2zDs2dpY29zIHF1ZSBhZmV0YW0gYSBvYnNlcnZhw6fDo28gZG8gdGVtcG8uIEVzdGVzIHNpc3RlbWFzIG7Do28gc8OjbyBjb21wbGV0YW1lbnRlIG9ic2VydsOhdmVpcyBwZWxvIHNpc3RlbWEgZGUgb2JzZXJ2YcOnw6NvIGRldmlkbyDDoCByZXNvbHXDp8OjbyB0ZW1wb3JhbCBvdSBlc3BhY2lhbCBkbyBzaXN0ZW1hIGRlIG9ic2VydmHDp8Ojby4gTm8gZW50YW50bywgcXVhbmRvIHRhbCBmZW7DtG1lbm8gb2NvcnJlIGR1cmFudGUgdW1hIG9ic2VydmHDp8OjbyBkZSByb3RpbmEsIG9zIHJlc3VsdGFkb3MgcG9kZW0gcGFyZWNlciBlc3RyYW5ob3MgZW0gY29tcGFyYcOnw6NvIGNvbSBhcyBvYnNlcnZhw6fDtWVzIGNpcmN1bmRhbnRlcyBxdWUgb2NvcnJlbSBhbyBtZXNtbyB0ZW1wbyAoW1pBSFVNRU5TS8OdLCAyMDA0XSgjWkFIVU1FTlNLw50sIDIwMDQpKS4KPC9wPgoKPHAgc3R5bGU9J3RleHQtYWxpZ246IGp1c3RpZnk7Jz4KTm8gQnJhc2lsLCBvcyBkYWRvcyBmb3JuZWNpZG9zLCBlbSBzdWEgbWFpb3JpYSwgZW5jb250cmFtLXNlIGVtIHN1YSBmb3JtYSBicnV0YSwgc2VtIHF1ZSBhIHF1YWxpZGFkZSBkb3MgbWVzbW9zIHNlamEgdmVyaWZpY2FkYS4gRXN0ZSB0cmFiYWxobyBjb25zaXN0ZSBlbSwgYXRyYXbDqXMgZGEgYXBsaWNhw6fDo28gZGUgY2VydG9zIG3DqXRvZG9zIGRlIGNvbnRyb2xlIGRlIHF1YWxpZGFkZSAoUUMpLCB2ZXJpZmljYXIgZSByb3R1bGFyIHRhaXMgZGFkb3MgY29tbyBzdXNwZWl0b3Mgb3UgbsOjbywgcGFyYSBxdWUgZnV0dXJhbWVudGUgcG9zc2FtIHNlcmVtIG1lbGhvcmVzIGFwcm92ZWl0YWRvcyBlbSBzZXUgdXNvLCBjb20gdW0gbWFpb3IgZ3JhdSBkZSBjb25maWFiaWxpZGFkZS4KPC9wPgoKIyA8Zm9udCBzaXplPSI0Ij4gX18yLiBNRVRPRE9MT0dJQV9fCgo8Zm9udCBzaXplPSIzIj4KPHAgc3R5bGU9J3RleHQtYWxpZ246IGp1c3RpZnk7Jz4KQSBtZXRvZG9sb2dpYSBhZG90YWRhIGNvbnNpc3RlIGVtIGR1YXMgcGFydGVzLCBpbmljaWFsbWVudGUgb3MgZGFkb3MgYnJ1dG9zIHBhc3NhcsOjbyBwb3IgdW1hIHNlbGXDp8OjbyBpbmljaWFsIGJhc2VhZGEgZW0gY2VydG9zIGZhdG9yZXMsIGVtIHNlZ3VpZGEsIGVsZXMgc2Vyw6NvIHN1Ym1ldGlkb3Mgw6AgdW1hIHPDqXJpZSBkZSB0ZXN0ZXMgZGUgY29udHJvbGUgZGUgcXVhbGlkYWRlLCBxdWUgb3MgcXVhbGlmaWNhcsOjbyBjb21vIHN1c3BlaXRvcyBvdSBuw6NvLCBhbMOpbSwgZGUgb2J0ZXItc2UgY2VydGFzIGluZm9ybWHDp8O1ZXMgcmVsZXZhbnRlcyBhIHJlc3BlaXRvIGRlbGVzLgo8L3A+CgojIyA8Zm9udCBzaXplPSIzLjUiPiBfXzIuMSBTRUxFw4fDg08gRE8gUEVSw41PRE8gREUgREFET1NfXwoKPGZvbnQgc2l6ZT0iMyI+CjxwIHN0eWxlPSd0ZXh0LWFsaWduOiBqdXN0aWZ5Oyc+Ck5lc3RlIHRyYWJhbGhvLCBzZXLDo28gdXNhZG9zIGRhZG9zIGhvcsOhcmlvcyBkYSBUZW1wZXJhdHVyYSBkbyBBciAoVGFyKSBkZSA5MSBFc3Rhw6fDtWVzIE1ldGVvcm9sw7NnaWNhcyBBdXRvbcOhdGljYXMgKEVNQXMpIGRvIFtJbnN0aXR1dG8gTmFjaW9uYWwgZGUgTWV0ZW9yb2xvZ2lhIChJTk1FVCldKGh0dHA6Ly93d3cuaW5tZXQuZ292LmJyL3BvcnRhbC8pLCBsb2NhbGl6YWRhcyBuYSByZWdpw6NvIHN1bCBkbyBCcmFzaWwgKFtGaWd1cmEgMDFhXSgjRmlndXJhIDAxKSkuIEFvIHRvZG8sIG9zIGVzdGFkb3MgZG8gUGFyYW7DoSAoUFIpLCBSaW8gR3JhbmRlIGRvIFN1bCAoUlMpIGUgU2FudGEgQ2F0YXJpbmEgKFNDKSwgcG9zc3VlbSwgcmVzcGVjdGl2YW1lbnRlLCAgMjcsIDQyIGUgMjIgRU1BcyBlbSBmdW5jaW9uYW1lbnRvLCB0ZW5kbyBwZXLDrW9kb3MgZGUgZnVuY2lvbmFtZW50byBxdWUgdmFyaWFtIGRlIHBvdWNvIG1haXMgZGUgdW0gbcOqcyAoQTg5NyAtIENhbWJhcsOhIGRvIFN1bCksIGF0w6kgbWFpcyBkZSAxNiBhbm9zIChBODAxIC0gUG9ydG8gQWxlZ3JlKSAoW0ZpZ3VyYSAwMWJdKCNGaWd1cmEgMDEpKS4gT3MgZGFkb3MgaG9yw6FyaW9zIGRlIFRhciB1dGlsaXphZG9zIGVzdMOjbyBubyBwYWRyw6NvIGRvIFtUZW1wbyBVbml2ZXJzYWwgQ29vcmRlbmFkbyAoVVRDKV0oaHR0cHM6Ly9wdC53aWtpcGVkaWEub3JnL3dpa2kvVGVtcG9fVW5pdmVyc2FsX0Nvb3JkZW5hZG8pLgo8L3A+Cgo8cCBzdHlsZT0ndGV4dC1hbGlnbjoganVzdGlmeTsnPgpPIG1vZGVsbyBkb3Mgc2Vuc29yZXMgZGUgdGVtcGVyYXR1cmEgdXNhZG8gw6kgbyBRTUgxMDIgZGEgZmFicmljYW50ZSBWYWlzYWxhLCBlc3RlcyBwb3NzdWVtIGFjdXLDoWNpYSBkZSDCsTAsMsKwQywgZSBzw6NvIGluc3RhbGFkb3MgYSB1bWEgYWx0dXJhIGRlIDIgbWV0cm9zIGFjaW1hIGRvIHNvbG8gKFtWQUlTQUxBLCAyMDAyXSgjVkFJU0FMQSwgMjAwMikpLiBVbWEgZXN0YcOnw6NvIG1ldGVvcm9sw7NnaWNhIGF1dG9tw6F0aWNhIChFTUEpIGRldmUgc2VyIGluc3RhbGFkYSAgZW0gIHVtYSAgw6FyZWEgZ3JhbWFkYSBmZWNoYWRhIGNvbSB1bSBjZXJjYWRvIGRlIHRlbGEgbWV0w6FsaWNhIGRlIDE0bSB4IDE4bSBlIHVtIG3DrW5pbW8gZGUgJDUwbV4yJCBsaXZyZSBkZSBlZmVpdG9zIGRlIGNvbnN0cnXDp8O1ZXMgYW8gc2V1IHJlZG9yIGUgcHJvdGVnaWRhIGNvbnRyYSByb3VibyBlIHZhbmRhbGlzbW9zIChbSU5NRVQsIDIwMTFdKCNJTk1FVCwgMjAxMSkpLgo8L3A+Cgo8Zm9udCBzaXplPSIyIj4KPGEgaWQgPSAiRmlndXJhIDAxIj4gPC9hPgpfX0ZpZ3VyYSAwMV9fIOKAkyAoYSkgTG9jYWxpemHDp8OjbyBkYXMgOTEgRU1BcyBkbyBJTk1FVCBubyBzdWwgZG8gQnJhc2lsLCAoYikgUGVyw61vZG8gZGUgZGFkb3MgZGFzIDkxIEVNQXMgZW0gYW5vcy4KIVtdKC4uL2ltYWdlcy9pbWdfMm1hcHNfMDEucG5nKQoKPGZvbnQgc2l6ZT0iMyI+CjxwIHN0eWxlPSd0ZXh0LWFsaWduOiBqdXN0aWZ5Oyc+CkRvaXMgY3JpdMOpcmlvcyBzZXLDo28gdXNhZG9zIHBhcmEgYSBzZWxlw6fDo28gZG9zIGRhZG9zIHF1ZSBzZXLDo28gdXRpbGl6YWRvcywgKGkpIGFzIGVzdGHDp8O1ZXMgbWV0ZW9yb2zDs2dpY2FzIGF1dG9tw6F0aWNhcyBkZXZlbSB0ZXJlbSBubyBtw61uaW1vIHF1YXRybyBhbm9zIGRlIGRhZG9zIChwb2RlbmRvIHNlcmVtIGRlc2NvbnTDrW51b3MpLCBwYXJhIGhhdmVyIHVtIHRlbXBvIG3DrW5pbW8gcGFyYSBhbsOhbGlzZSBzZXIgY29uc2lzdGVudGUsIGUgKGlpKSBvIHBlcsOtb2RvIGRlIGFuw6FsaXNlIHRlcsOhIGluw61jaW8gZW0gMDEvMDEvMjAwOCwgdGVuZG8gY29tbyBkYXRhIGZpbmFsIDMxLzEyLzIwMTYuIEVzdGUgYW5vIGluaWNpYWwgZm9pIGVzY29saGlkbywgcG9pcyBhIHBhcnRpciBkZWxlIG5vdG91LXNlIHVtIGJvbSBhY3Jlc2NpbW8gbmEgcXVhbnRpZGFkZSBkZSBFTUFzIGV4aXN0ZW50ZSAoW0ZpZ3VyYSAwMl0oI0ZpZ3VyYSAwMikpLCBhbMOpbSBkZSBxdWUsIGEgZGlzdHJpYnVpw6fDo28gZXNwYWNpYWwgZGVsYXMgdG9ybm91LXNlIG1haXMgaG9tb2fDqm5lYSAoW0ZpZ3VyYSAwM10oI0ZpZ3VyYSAwMykgZSBbRmlndXJhIDA0XSgjRmlndXJhIDA0KSkuCjwvcD4KCjxmb250IHNpemU9IjIiPgo8YSBpZCA9ICJGaWd1cmEgMDIiPiA8L2E+Cl9fRmlndXJhIDAyX18g4oCTIEVNQXMgY29tIGluw61jaW8gZGUgZnVuY2lvbmFtZW50byBwcsOpLXDDs3MgMjAwOAohW10oLi4vaW1hZ2VzL2ltZ19wcmVwb3MyMDA4LnBuZykKCjxmb250IHNpemU9IjIiPgo8YSBpZCA9ICJGaWd1cmEgMDMiPiA8L2E+Cl9fRmlndXJhIDAzX18g4oCTIERpc3BvbmliaWxpZGFkZSBtZW5zYWwgcGFyYSBjYWRhIHVtYSBkYXMgOTEgRU1BIGRhIHJlZ2nDo28gc3VsIGRvIEJyYXNpbC4KCiFbXSguLi9pbWFnZXMvaW1nX2Rpc3BvbWVuLnBuZykKCjxmb250IHNpemU9IjIiPgo8YSBpZCA9ICJGaWd1cmEgMDQiPiA8L2E+Cl9fRmlndXJhIDA0X18g4oCTIEV2b2x1w6fDo28gdGVtcG9yYWwgbWVuc2FsIGRvIG7Dum1lcm8gZGUgRU1Bcy4KCiFbXSguLi9pbWFnZXMvaW1nX2V2b21lbi5wbmcpCgo8Zm9udCBzaXplPSIzIj4KPHAgc3R5bGU9J3RleHQtYWxpZ246IGp1c3RpZnk7Jz4KUGFyYSBxdWUgYSBzZWxlw6fDo28gZm9zc2UgZmVpdGEsIGFudGVzLCBmb2kgbmVjZXNzw6FyaW8gdW1hIHJlZ3VsYXJpemHDp8OjbyBkYXMgc8OpcmllcyB0ZW1wb3JhaXMgZGUgY2FkYSBFTUEsIHBhcmEgYXNzaW0gZ2FyYW50aXIgcXVlIHRvZGFzIHRlbmhhbSAyNCBob3JhcyBlbSBjYWRhIGRpYSwgZSAzNjUgKG91IDM2NiBkaWFzLCBzZSBhbm8gYmlzc2V4dG8pIGVtIGNhZGEgYW5vLgo8L3A+Cgo8cCBzdHlsZT0ndGV4dC1hbGlnbjoganVzdGlmeTsnPgpBcMOzcyBhIHNlbGXDp8OjbywgcmVzdGFyYW0gYW8gdG9kbyA4MCBFTUFzIHBhcmEgYW7DoWxpc2UsIGVzdGFuZG8gMjQgbG9jYWxpemFkYXMgbm8gZXN0YWRvIGRvIFBhcmFuw6EgKFBSKSwgMzYgbm8gZXN0YWRvIGRvIFJpbyBHcmFuZGUgZG8gU3VsIChSUykgZSAyMCBubyBlc3RhZG8gZGUgU2FudGEgQ2F0YXJpbmEgKFNDKSwgY29tIGRpc3BvbmliaWxpZGFkZSBkZSBkYWRvcyB2YXJpYW5kbyBkZSA0MSw1JSAoQTg4MyAtIEliaXJ1YsOhKSBhdMOpIDk5LDQgKEE4MDMgLSBQb3J0byBBbGVncmUpIChbRmlndXJhIDA1XSgjRmlndXJhIDA1KSkuIE5hIFtUYWJlbGEgMDFdKCNUYWJlbGEgMDEpIMOpIG1vc3RyYWRvIGFzIEVNQXMgc2VsZWNpb25hZGFzIHF1ZSBhcHJlc2VudGFyYW0gbyBtYWlvciBwZXLDrW9kbyBkZSBkYWRvcy4KPC9wPgoKPGZvbnQgc2l6ZT0iMiI+CjxhIGlkID0gIkZpZ3VyYSAwNSI+IDwvYT4KX19GaWd1cmEgMDVfXyDigJMgRGlzcG9uaWJpbGlkYWRlIGRhcyA4MCBFTUFzIHNlbGVjaW9uYWRhcyBkbyBwZXLDrW9kbyBkZSAyMDA4IGF0w6kgMjAxNgoKIVtdKC4uL2ltYWdlcy9pbWdfZGlzcG9uaWJpbGlkYWRlLnBuZykKCjxmb250IHNpemU9IjIiPgo8YSBpZCA9ICJUYWJlbGEgMDEiPiA8L2E+Cl9fVGFiZWxhIDAxX18g4oCTIEluZm9ybWHDp8O1ZXMgc29icmUgYXMgRU1BczogSW7DrWNpbyBkZSBGdW5jaW9uYW1lbnRvLCBQZXLDrW9kbywgTGF0aXR1ZGUsIExvbmdpdHVkZSwgQWx0aXR1ZGUuCgpgYGB7ciwgZWNobz1GQUxTRX0KdDAxIDwtIGVtYXNfc2VsCgpuYW1lcyh0MDEpWzFdIDwtICJDw7NkaWdvIgpuYW1lcyh0MDEpWzJdIDwtICJFc3RhZG8iCm5hbWVzKHQwMSlbM10gPC0gIk5vbWUiCm5hbWVzKHQwMSlbNF0gPC0gIkluw61jaW8gZGUgRnVuY2lvbmFtZW50byIgCm5hbWVzKHQwMSlbNV0gPC0gIlBlcsOtb2RvIChlbSBhbm9zKSIKbmFtZXModDAxKVs2XSA8LSAiTGF0aXR1ZGUgKGVtIMKwKSIKbmFtZXModDAxKVs3XSA8LSAiTG9uZ2l0dWRlIChlbSDCsCkiCm5hbWVzKHQwMSlbOF0gPC0gIkFsdGl0dWRlIChlbSBtKSIKI2tuaXRyOjprYWJsZSh0MDEpCkRUOjpkYXRhdGFibGUodDAxKQoKYGBgCgojIyMgPGZvbnQgc2l6ZT0iMyI+IF9fMi4xLjEgSW5mb3JtYcOnw7VlcyBUw6ljbmljYXNfXwoKPGZvbnQgc2l6ZT0iMyI+CjxwIHN0eWxlPSd0ZXh0LWFsaWduOiBqdXN0aWZ5Oyc+ClBhcmEgYSByZWFsaXphw6fDo28gZGVzdGUgdHJhYmFsaG8sIGZvaSB1dGlsaXphZG8gYSBsaW5ndWFnZW0gZGUgcHJvZ3JhbWHDp8OjbyBbUl0oI1IpIChSIENvcmUgVGVhbSwgMjAxNyksIGNvbSBvIHNvZnR3YXJlIGxpdnJlIGNvbSBhbWJpZW50ZSBkZSBkZXNlbnZvbHZpbWVudG8gaW50ZWdyYWRvIFtSc3R1ZGlvXSgjUlN0dWRpbykgKFJTdHVkaW8gVGVhbSwgMjAxNiksIGUgb3Mgc2VndWludGVzIHBhY290ZXMgZm9yYW0gdXRpbGl6YWRvczoKPC9wPgoKPHAgc3R5bGU9J3RleHQtYWxpZ246IGp1c3RpZnk7Jz4KW2RwbHlyXSgjZHBseXIpIChXSUNLSEFNLCAyMDE3KSwgW0RUXSgjRFQpIChYSUUsIDIwMTYpLCBbZ2dwbG90Ml0oI2dncGxvdDIpIChXSUNLSEFNLCAyMDE2KSwgW2thYmxlRXh0cmFdKCNrYWJsZUV4dHJhKSAoWkhVLCAyMDE3KSwgW2tuaXRyXSgja25pdHIpIChYSUUsIDIwMTcpLCBbbHVicmlkYXRlXSgjbHVicmlkYXRlKSAoR1JPTEVNVU5ELCAyMDE2KSwgW21hZ3JpdHRyXSgjbWFncml0dHIpIChCQUNIRTsgV0lDS0hBTSwgMjAxNCksIFtvcGVuYWlyXSgjb3BlbmFpcikgKENBUlNMQVc7IFJPUEtJTlMsIDIwMTcpLCBbcGFkcl0oI3BhZHIpIChUSE9FTiwgMjAxNyksIFtwbHlyXSgjcGx5cikgKFdJQ0tIQU0sIDIwMTYpLCBbcmFzdGVyXSgjcmFzdGVyKSAoSElKTUFOUywgMjAxNiksIFtyaW9dKCNyaW8pIChDSEFOOyBDSCBDSEFOOyBMRUVQRVI7IEJFQ0tFUiwgMjAxOCksIFtzY2FsZXNdKCNzY2FsZXMpIChXSUNLSEFNLCAyMDE3KSwgW3N0cmluZ3JdKCNzdHJpbmdyKSAoV0lDS0hBTSwgMjAxNyksIFt0aWR5dmVyc2VdKCN0aWR5dmVyc2UpIChXSUNLSEFNLCAyMDE3KS4KPC9wPgoKIyMgPGZvbnQgc2l6ZT0iMy41Ij4gX18yLjIgVEVTVEVTIERFIENPTlRST0xFIERFIFFVQUxJREFERV9fCgo8Zm9udCBzaXplPSIzIj4KPHAgc3R5bGU9J3RleHQtYWxpZ246IGp1c3RpZnk7Jz4KT3MgdGVzdGVzIGFwbGljYWRvcyBhb3MgZGFkb3MgZGEgdGVtcGVyYXR1cmEgZG8gYXIgc2Vyw6NvIGRpdmlkb3MgZW0gIGNhdGVnb3JpYXMsIHNlbmRvIGVsYXM6IExpbWl0ZXMgZG8gSW50ZXJ2YWxvIGRlIFZhcmlhw6fDo28sIFBlcnNpc3TDqm5jaWEgVGVtcG9yYWwsIENvbnNpc3TDqm5jaWEgSW50ZXJuYSwgQ29uc2lzdMOqbmNpYSBUZW1wb3JhbCwgQ29uc2lzdMOqbmNpYSBFc3BhY2lhbCBlIEhvbW9nZW5laWRhZGUgVGVtcG9yYWwuIEVsZXMgc8OjbyBtb3N0cmFkb3MgbmEgW1RhYmVsYSAwMl0oI1RhYmVsYSAwMiksIGUgb3MgZGFkb3MgZm9yYW0gY29uc2lkZXJhZG9zIHN1c3BlaXRvcyBxdWFuZG8gb3MgdGVzdGVzIHPDo28gdsOhbGlkb3MuCjwvcD4KCjxmb250IHNpemU9IjIiPgo8YSBpZCA9ICJUYWJlbGEgMDIiPiA8L2E+Cl9fVGFiZWxhIDAyX18g4oCTIENvbnRyb2xlcyBkZSBxdWFsaWRhZGUgKFFDcykgYXBsaWNhZG9zIGFvcyBkYWRvcyBkYSB0ZW1wZXJhdHVyYSBkbyBhciBkYXMgRU1BcyBkbyBJTk1FVAoKYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0V9CgojIExpc3RhIGNvbSBvcyB0aXBvcyBkZSBjb250cm9sZXMgZGUgcXVhbGlkYWRlcwpxY19saXN0IDwtIGMoCiAgIl8oUUMxKSBUZXN0ZSBkbyBJbnRlcnZhbG8gZGUgVmFyaWHDp8Ojb18iLAogICJfKFFDMikgVGVzdGUgZGUgUGVyc2lzdMOqbmNpYSBUZW1wb3JhbF8iLAogICJfKFFDMykgVGVzdGUgZGUgQ29uc2lzdMOqbmNpYSBJbnRlcm5hXyIsCiAgIl8oUUM0KSBUZXN0ZSBkZSBDb25zaXN0w6puY2lhIFRlbXBvcmFsXyIsCiMgICJfKFFDNSkgVGVzdGUgZGUgQ29uc2lzdMOqbmNpYSBFc3BhY2lhbF8iLAogICJfKFFDNikgVGVzdGUgZGUgUmVncmVzc8OjbyBFc2FwY2lhbF8iKQoKIyBMaXN0YSBjb20gYXMgZXF1YcOnw7VlcyBkb3MgY29udHJvbGVzIGRlIHF1YWxpZGFkZXMKZXFfbGlzdCA8LSBjKAogICIkVF97YXZnfSQgPCAkLTUwwrBDJCBvdSAkVF97YXZnfSQgPiAkNjDCsEMkIiwKICAiJFRfe2F2Z30kIDwgJFRfe2xvd30kIG91ICRUX3thdmd9JCA+ICRUX3toaWdofSQiLAogICIkVF97YXZnfSAoaCkkID0gJFRfe2F2Z30gKGgtMSkkID0gJFRfe2F2Z30gKGgtMikkID0gLi4uID0gJFRfe2F2Z30gKGgtbikkIiAsCiAgIiRUX3ttaW59KGgpJCDiiaUgJFRfe21heH0oaCkkIiwKICAiJFRfe2luc3R9KGgpJCA8ICRUX3ttaW59KGgpJCBvdSAkVF97aW5zdH0oaCkkID4gJFRfe21heH0oaCkkIiwKICAiJFRfe2F2Z30oaCkkIDwgJFRfe2RhdmcsZn0oaCkkIiwKICAiJFRfe2F2Z30oZCkkIDwgJFRfe21pbn0oZCkkIG91ICRUX3thdmd9KGQpJCA+ICRUX3ttYXh9KGQpJCIsCiAgIiRUX3ttYXh9KGQpJCA8ICRUX3ttaW59KGQtMSkkIiwKICAiJFRfe21pbn0oZCkkIOKJpSAkVF97bWF4fShkLTEpJCIsCiAgIiR8VF97YXZnfShoKSQgLSAkVF97YXZnfShoLWR0KXwkID4gJFRfe3RvbH0gKGR0KSQiLAogICIkeCcgLSBmcyckID4gJFRfe2F2Z30oZCkkID4gJHgnICsgZnMnJCAiKQoKIyBMaXN0YSBjb20gYXMgcmVmZXLDqm5jaWFzIGRvcyBjb250cm9sZXMgZGUgcXVhbGlkYWRlcwpyZWZlcl9saXN0IDwtIGMoCiAgIltfKEVTVMOJVkVaIGVsIGFsLiwgMjAxMSlfXSgjRVNUw4lWRVogZWwgYWwuLCAyMDExKSIsCiAgIltfKEVTVMOJVkVaIGVsIGFsLiwgMjAxMSlfXSgjRVNUw4lWRVogZWwgYWwuLCAyMDExKSIsCiAgIltfKE1FRUs7IEhBVEZJRUxELCAxOTk0KV9dKCNNRUVLOyBIQVRGSUVMRCwgMTk5NCkiLAogICJbXyhFU1TDiVZFWiBlbCBhbC4sIDIwMTEpX10oI0VTVMOJVkVaIGVsIGFsLiwgMjAxMSkiLAogICIiLAogICIiLAogICJbXyhNRUVLOyBIQVRGSUVMRCwgMTk5NClfXSgjTUVFSzsgSEFURklFTEQsIDE5OTQpIiwKICAiW18oRVNUw4lWRVogZWwgYWwuLCAyMDExKV9dKCNFU1TDiVZFWiBlbCBhbC4sIDIwMTEpIiwKICAiW18oRVNUw4lWRVogZWwgYWwuLCAyMDExKV9dKCNFU1TDiVZFWiBlbCBhbC4sIDIwMTEpIiwKICAiW18oV01PLCAxOTkzKV9dKCNXTU8sIDE5OTMpIiwKICAiW18oRkFMTEFITkVaSEFELCAyMDEyKV9dKCNGQUxMQUhORVpIQUQsIDIwMTIpIikKCiMgTsO6bWVybyBkZSBzdWItaXRlbXMgZGUgY2FkYSB0aXBvIGRlIGNvbnRyb2xlIGRlIHF1YWxpZGFkZSAoY29ycmVzcG9uZGVudGUgw6AgUUNfTElTVCkKcWNfZ3JvdXBzIDwtIGMoMiwgMSwgNiwgMSwgMSkgCgojIE5vbWUgZGFzIGNvbHVuYXMgZW0gb3JkZW0KY29sX25hbWVzIDwtIGMoIlByb2Nlc3NvIGRlIFZhbGlkYcOnw6NvIiwgIlRlbXBlcmF0dXJhIGRvIEFyIChlbSDCsEMpIiwgIlJlZmVyw6puY2lhcyIpCgojIEdlcmFuZG8gdGFiZWxhIGNvbSBvcyBxY3MKcWMudGFibGUoCiAgUUNfTElTVCA9IHFjX2xpc3QsCiAgRVFVQVRJT05TX0xJU1QgPSBlcV9saXN0LAogIFJFRkVSRU5DRVNfTElTVCA9IHJlZmVyX2xpc3QsCiAgUUNfR1JPVVBTID0gcWNfZ3JvdXBzLAogIENPTFVNTlNfTkFNRVMgPSBjb2xfbmFtZXMpCmBgYAoKPGZvbnQgc2l6ZT0iMiI+CjxwIHN0eWxlPSd0ZXh0LWFsaWduOiBqdXN0aWZ5Oyc+Cl9Ob3RhOl8KJFRfe2F2Z30oaCkkIMOpIGEgbcOpZGlhIGFyaXRtw6l0aWNhIHNpbXBsZXMgZGUgJFRfe21pbn0oaCkkICh0ZW1wZXJhdHVyYSBtw61uaW1hIGRvIGFyKSBlICRUX3ttYXh9KGgpJCAodGVtcGVyYXR1cmEgbcOheGltYSBkbyBhcik7CiQtNTDCsEMkIGUgJDYwwrBDJCBzw6NvLCByZXNwZWN0aXZhbWVudGUsIG9zIGxpbWl0ZXMgbcOtbmltbyBlIG3DoXhpbW8gaW5zdHJ1bWVudGFsOwokVF97bG93fSQgZSAkVF97aGlnaH0kIHPDo28sIHJlc3BlY3RpdmFtZW50ZSwgb3MgdmFsb3JlcyBtw61uaW1vIGUgbcOheGltbyBqw6EgcmVnaXN0cmFkb3MgcGVsYSBlc3Rhw6fDo28gY2xpbWF0b2zDs2dpY2EgbWFpcyBwcsOzeGltYSBkZSBjYWRhIEVNQTsKJG4kIMOpIHVtIG7Dum1lcm8gbmF0dXJhbCwgY29ycmVzcG9uZGVudGUgw6AocykgaG9yYShzKSBhbnRlcmlvcmVzIMOgICRUX3thdmd9IChoKSQ7CiRUX3ttaW59KGgpJCBlICRUX3ttYXh9KGgpJCBzw6NvLCByZXNwZWN0aXZhbWVudGUsIG9zIHZhbG9yZXMgbcOtbmltbyBlIG3DoXhpbW8gaG9yw6FyaW8gZGUgdGVtcGVyYXR1cmE7CiRUX3tpbnN0fShoKSQgw6kgYSB0ZW1wZXJhdHVyYSBpbnN0YW50w6JuZWEgZG8gYXIsIHF1ZSBjb3JyZXNwb25kZSDDoCBtw6lkaWEgZGUgdW0gbWludXRvIGRlIDEyIHZhbG9yZXMgZGUgYW1vc3RyYWdlbnMgbWVkaWRvcyBhIGNhZGEgY2luY28gc2VndW5kb3M7CiRUX3tkYXZnLGZ9KGgpJCDDqSBhIHRlbXBlcmF0dXJhIG3DqWRpYSBkbyBwb250byBkZSBvcnZhbGhvLCBmaWx0cmFkYSBhcGVuYXMgY29tIGRhZG9zIHF1ZSBwYXNzYXJhbSBub3MgdGVzdGVzICdhJyBlICdiJyBkbyBRQzMsIGFwbGljYWRvcyBwYXJhIGEgdmFyacOhdmVsICRUX3tkYXZnfShoKSQgKHRlbXBlcmF0dXJhIG3DqWRpYSBkbyBwb250byBkZSBvcnZhbGhvIGhvcsOhcmlhKTsKJFRfe2F2Z30oZCkkIMOpIG3DqWRpYSBhcml0bcOpdGljYSBzaW1wbGVzIGRhcyAkVF97YXZnfShoKSQ7CiRUX3ttaW59KGQpJCDDqSBvIG1lbm9yIHZhbG9yIGRlIHRlbXBlcmF0dXJhIHJlZ2lzdHJhZGEgbm8gZGlhIGRhcyAkVF97bWlufShoKSQ7CiRUX3ttYXh9KGQpJCDDqSBvIG1haW9yIHZhbG9yIGRlIHRlbXBlcmF0dXJhIHJlZ2lzdHJhZGEgbm8gZGlhIGRhcyAkVF97bWF4fShoKSQ7CiRUX3ttaW59KGQtMSkkIMOpIGEgdGVtcGVyYXR1cmEgbcOtbmltYSBkbyBkaWEgYW50ZXJpb3I7CiRUX3ttYXh9KGQtMSkkIMOpIGEgdGVtcGVyYXR1cmEgbcOheGltYSBkbyBkaWEgYW50ZXJpb3I7CiRkdCQgc8OjbyB2YWxvcmVzIGNvcnJlc3BvbmRlbnRlcyBhIHVtYSBkZXRlcm1pbmFkYSBob3JhLCBzZW5kbyBlbGVzOiAxaCwgMmgsIDNoLCA2aCBlIDEyaDsKJFRfe3RvbH0gKGR0KSQgw6kgdW0gdmFsb3IgdG9sZXLDoXZlbCBkZSB0ZW1wZXJhdHVyYSwgcXVlIHZhcmlhIGNvbSAkZHQkLCByZWNlYmVuZG8gb3Mgc2VndWludGVzIHZhbG9yZXMgcmVzcGVjdGl2b3M6IDTCsEMgKDFoKSwgN8KwQyAoMmgpLCA5wrBDICgzaCksIDE1wrBDICg2aCkgZSAyNcKwQyAoMTJoKTsKJHgnJCDDqSBhIGVzdGltYXRpdmEgbsOjbyBwb25kZXJhZGEsIG9idGlkYSBhdHJhdsOpcyBkbyBlcnJvIHBhZHLDo28gZGUgZXN0aW1hdGl2YSAocyk7CiRzJyQgw6kgZXJybyBwYWRyw6NvIHBvbmRlcmFkbyBkYSBlc3RpbWF0aXZhOwokZiQgw6kgdW1hIGNvbnN0YW50ZSBkZSBhanVzdGUsIGN1am8gdmFsb3Igw6kgMy4KCjwvcD4KCiMgPGZvbnQgc2l6ZT0iNCI+IF9fMy4gUkVTVUxUQURPU19fCgpgYGB7cn0KIyB0ZXN0X25hbWUgPC0gJ0xpbWl0ZXMgZG8gSW50ZXJ2YWxvIGRlIFZhcmlhw6fDo28nOwojIHRlc3RfdHlwZSA8LSAiZGFpbHkiOwojIHN1bW1hcnlfbGluayA8LSAiLi4vLi4vamJjLWljL2RhdGFfc2F2ZXMvc3VtbWFyeV84MC5yZHMiOwojICNwcm9kdWN0M19saW5rIDwtICcuLi8uLi9qYmMtaWMvb3V0cHV0L3FjMWEtc3VtbWFyeS10YXZnLWRhdGEtaW5tZXQtMjAwOC0yMDE2LTR5cnMtc291dGgucmRzJzsgIyAwIHN1c3BlY3QKIyAjcHJvZHVjdDNfbGluayA8LSAnLi4vLi4vamJjLWljL291dHB1dC9xYzRhLXN1bW1hcnktdGF2Zy0xMmgtZGF0YS1pbm1ldC0yMDA4LTIwMTYtNHlycy1zb3V0aC5yZHMnOyAjIDEgc3VzcGVjdAojIHByb2R1Y3QzX2xpbmsgPC0gJy4uLy4uL2piYy1pYy9vdXRwdXQvcWMxYi1zdW1tYXJ5LXRhdmctZGF0YS1pbm1ldC0yMDA4LTIwMTYtNHlycy1zb3V0aC5yZHMnOyAjIyA2NiBzdXNwZWN0cwojIAojIHJpbzo6aW1wb3J0KHByb2R1Y3QzX2xpbmspCiMgCiMgZGYgPSBiaW5kX3Jvd3MoCiMgICByaW86OmltcG9ydChwcm9kdWN0M19saW5rKSAlPiUgZmlsdGVyKHNpdGUgIT0gJ0E4NTEnKSwKIyAgIHJpbzo6aW1wb3J0KHByb2R1Y3QzX2xpbmspICU+JSBmaWx0ZXIoc2l0ZSA9PSAnQTg0NScpICU+JSBtdXRhdGUoc2l0ZSA9ICJBODUxIikpICU+JQojICAgYXJyYW5nZShkZXNjKHRvdCkpCmBgYAoKIyMgPGZvbnQgc2l6ZT0iMy41Ij4gX18zLjEgTGltaXRlcyBkbyBJbnRlcnZhbG8gZGUgVmFyaWHDp8OjbyAoUUMxKV9fCgpgYGB7ciwgZXZhbD1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRX0KdGV4dC5zdXNwZWN0KAogIHRlc3RfbmFtZSA9ICJMaW1pdGVzIGRvIEludGVydmFsbyBkZSBWYXJpYcOnw6NvIiwKICB0ZXN0X3R5cGUgPSAiaG91cmx5IiwKICBzdW1tYXJ5X2xpbmsgPSBzdW1tYXJ5X2xpbmssCiAgcHJvZHVjdDNfbGluayA9ICcuLi8uLi9qYmMtaWMvb3V0cHV0L3FjMWEtc3VtbWFyeS10YXZnLWRhdGEtaW5tZXQtMjAwOC0yMDE2LTR5cnMtc291dGgucmRzJykKYGBgCjxmb250IHNpemU9IjMiPgo8cCBzdHlsZT0ndGV4dC1hbGlnbjoganVzdGlmeTsnPgpfXyhhKV9fIEEgYXBsaWNhw6fDo28gZG8gdGVzdGUgZGUgTGltaXRlcyBkbyBJbnRlcnZhbG8gZGUgVmFyaWHDp8OjbyAnYScgbmFzIDgwIEVNQXMgc2VsZWNpb25hZGFzIG7Do28gZ2Vyb3UgbmVuaHVtYSBFTUEgcXVlIGFwcmVzZW50b3UgZGFkb3MgY29uc2lkZXJhZG9zIHN1c3BlaXRvcy4KPC9wPgoKYGBge3IsIGV2YWw9RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0V9CnRleHQuc3VzcGVjdCgKICB0ZXN0X25hbWUgPSAiTGltaXRlcyBkbyBJbnRlcnZhbG8gZGUgVmFyaWHDp8OjbyIsCiAgdGVzdF90eXBlID0gImhvdXJseSIsCiAgc3VtbWFyeV9saW5rID0gc3VtbWFyeV9saW5rLAogIHByb2R1Y3QzX2xpbmsgPSAnLi4vLi4vamJjLWljL291dHB1dC9xYzFiLXN1bW1hcnktdGF2Zy1kYXRhLWlubWV0LTIwMDgtMjAxNi00eXJzLXNvdXRoLnJkcycpCmBgYAo8Zm9udCBzaXplPSIzIj4KPHAgc3R5bGU9J3RleHQtYWxpZ246IGp1c3RpZnk7Jz4KX18oYilfXyBBIGFwbGljYcOnw6NvIGRvIHRlc3RlIGRlIExpbWl0ZXMgZG8gSW50ZXJ2YWxvIGRlIFZhcmlhw6fDo28gJ2InIG5hcyA4MCBFTUFzIHNlbGVjaW9uYWRhcyBnZXJvdSA2NiBFTUFzIHF1ZSBhcHJlc2VudGFyYW0gZGFkb3MgY29uc2lkZXJhZG9zIHN1c3BlaXRvcy4gQSBtw6lkaWEgZGEgcG9yY2VudGFnZW0gZGUgZGFkb3MgY29uc2lkZXJhZG9zIHN1c3BlaXRvcyBuZXNzZSB0ZXN0ZSBmb2kgMC4xMDA2JSAo4omIIDc5IGhvcmFzKSwgZSBhIEVNQSBxdWUgYXByZXNlbnRvdSBhIG1haW9yIHBvcmNlbnRhZ2VtIGRlIGRhZG9zIGNvbnNpZGVyYWRvcyBzdXNwZWl0b3MgZm9pIGEgQTg0NSDigJMgTW9ycm8gRGEgSWdyZWphIChCb20gSmFyZGltIERhIFNlcnJhKSAoU0MpLCBjb20gMi4xODcyJSAoMTcyNiBob3JhcykgKFtUYWJlbGEgMDNdKCNUYWJlbGEgMDMpKS4KPC9wPgoKPGZvbnQgc2l6ZT0iMiI+CjxhIGlkID0gIlRhYmVsYSAwMyI+IDwvYT4KX19UYWJlbGEgMDNfXyDigJMgRU1BcyBjb20gbWFpb3IgbsO6bWVybyBkZSBkYWRvcyBjb25zaWRlcmFkb3Mgc3VzcGVpdG9zIG5vIHRlc3RlIFFDMWIgZW0gb3JkZW0gZGVjcmVzY2VudGUuCgpgYGB7ciwgZWNobz1GQUxTRX0KdDAyIDwtIHFjLnJlc3VsdHMudGFibGUoCiAgRElSRUNUT1JZID0gJy4uLy4uL2piYy1pYy9vdXRwdXQvcWMxYi1zdW1tYXJ5LXRhdmctZGF0YS1pbm1ldC0yMDA4LTIwMTYtNHlycy1zb3V0aC5yZHMnLAogIEVNQVMgPSBlbWFzX3NlbCwKICBUSU1FID0gImhvdXJzIiwKIyAgUkVUVVJOID0gInRhYmxlIikKICBSRVRVUk4gPSAiZHQiKQoKdDAyCgojICgxMDAvNzg5MTIpICogKG1lYW4oKHJlYWRSRFMoIi4uLy4uL2piYy1pYy9vdXRwdXQvcWMxYi1zdW1tYXJ5LXRhdmctZGF0YS1pbm1ldC0yMDA4LTIwMTYtNHlycy1zb3V0aC5yZHMiKSAlPiUgYXJyYW5nZShkZXNjKHBlcmMpKSlbWzRdXSwgbmEucm0gPSBUUlVFKSkKCiNyZXN1bHQudGV4dChRUlRfREYgPSB0MDIsIFRZUEUgPSAiaG91ciIsIFRFU1RFID0gIkxpbWl0ZXMgZG8gSW50ZXJ2YWxvIGRlIFZhcmlhw6fDo28iLCBMRVRSQSA9ICJiIiwgTlVNRVJPX1RBQkVMQSA9ICIwMyIpCmBgYAoKX19GaWd1cmEgMDZfXyDigJMgRGlzdHJpYnVpw6fDo28gZXNwYWNpYWwgZGFzIEVNQXMgY29tIGRhZG9zIGNvbnNpZGVyYWRvcyBzdXNwZWl0b3Mgbm8gdGVzdGUgUUMxYi4KCiFbXSguLi9pbWFnZXMvaW1nX3FjMWIucG5nKQoKIyMgPGZvbnQgc2l6ZT0iMy41Ij4gX18zLjIgUGVyc2lzdMOqbmNpYSBUZW1wb3JhbCAoUUMyKV9fCgpgYGB7ciwgZXZhbD1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRX0KdGV4dC5zdXNwZWN0KAogIHRlc3RfbmFtZSA9ICJQZXJzaXN0w6puY2lhIFRlbXBvcmFsIiwKICB0ZXN0X3R5cGUgPSAiaG91cmx5IiwKICBzdW1tYXJ5X2xpbmsgPSBzdW1tYXJ5X2xpbmssCiAgcHJvZHVjdDNfbGluayA9ICcuLi8uLi9qYmMtaWMvb3V0cHV0L3FjMmEtc3VtbWFyeS10YXZnLWRhdGEtaW5tZXQtMjAwOC0yMDE2LTR5cnMtc291dGgucmRzJykKYGBgCjxmb250IHNpemU9IjMiPgo8cCBzdHlsZT0ndGV4dC1hbGlnbjoganVzdGlmeTsnPgpfXyhhKV9fIEEgYXBsaWNhw6fDo28gZG8gdGVzdGUgZGUgUGVyc2lzdMOqbmNpYSBUZW1wb3JhbCAnYScgbmFzIDgwIEVNQXMgc2VsZWNpb25hZGFzIGdlcm91IDgwIEVNQXMgcXVlIGFwcmVzZW50YXJhbSBkYWRvcyBjb25zaWRlcmFkb3Mgc3VzcGVpdG9zLiBBIG3DqWRpYSBkYSBwb3JjZW50YWdlbSBkZSBkYWRvcyBjb25zaWRlcmFkb3Mgc3VzcGVpdG9zIG5lc3NlIHRlc3RlIGZvaSA0LjY0MTglICjiiYggMzY2MyBob3JhcyksIGUgYSBFTUEgcXVlIGFwcmVzZW50b3UgYSBtYWlvciBwb3JjZW50YWdlbSBkZSBkYWRvcyBjb25zaWRlcmFkb3Mgc3VzcGVpdG9zIGZvaSBhIEE4MzQg4oCTIFRyYW1hbmRhw60gKFJTKSwgY29tIDkuNDQ2JSAoNzQ1NCBob3JhcykgKFtUYWJlbGEgMDRdKCNUYWJlbGEgMDQpKS4KPC9wPgoKPGZvbnQgc2l6ZT0iMiI+CjxhIGlkID0gIlRhYmVsYSAwNCI+IDwvYT4KX19UYWJlbGEgMDRfXyDigJMgRU1BcyBjb20gbWFpb3IgbsO6bWVybyBkZSBkYWRvcyBjb25zaWRlcmFkb3Mgc3VzcGVpdG9zIG5vIHRlc3RlIFFDMmEgZW0gb3JkZW0gZGVjcmVzY2VudGUuCgpgYGB7ciwgZWNobz1GQUxTRX0KdDAzIDwtIHFjLnJlc3VsdHMudGFibGUoCiAgRElSRUNUT1JZID0gJy4uLy4uL2piYy1pYy9vdXRwdXQvcWMyYS1zdW1tYXJ5LXRhdmctZGF0YS1pbm1ldC0yMDA4LTIwMTYtNHlycy1zb3V0aC5yZHMnLAogIEVNQVMgPSBlbWFzX3NlbCwKICBUSU1FID0gImhvdXJzIiwKIyAgUkVUVVJOID0gInRhYmxlIikKICBSRVRVUk4gPSAiZHQiKQoKdDAzCgojcmVzdWx0LnRleHQoUVJUX0RGID0gdDAzLCBUWVBFID0gImhvdXIiLCBURVNURSA9ICJQZXJzaXN0w6puY2lhIFRlbXBvcmFsIiwgTEVUUkEgPSAiYSIsIE5VTUVST19UQUJFTEEgPSAiMDQiKQpgYGAKCl9fRmlndXJhIDA3X18g4oCTIERpc3RyaWJ1acOnw6NvIGVzcGFjaWFsIGRhcyBFTUFzIGNvbSBkYWRvcyBjb25zaWRlcmFkb3Mgc3VzcGVpdG9zIG5vIHRlc3RlIFFDMmEuCgohW10oLi4vaW1hZ2VzL2ltZ19xYzJhLnBuZykKCiMjIDxmb250IHNpemU9IjMuNSI+IF9fMy4zIENvbnNpc3TDqm5jaWEgSW50ZXJuYSAoUUMzKV9fCgpgYGB7ciwgZXZhbD1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRX0KdGV4dC5zdXNwZWN0KAogIHRlc3RfbmFtZSA9ICJDb25zaXN0w6puY2lhIEludGVybmEiLAogIHRlc3RfdHlwZSA9ICJob3VybHkiLAogIHN1bW1hcnlfbGluayA9IHN1bW1hcnlfbGluaywKICBwcm9kdWN0M19saW5rID0gJy4uLy4uL2piYy1pYy9vdXRwdXQvcWMzYS1zdW1tYXJ5LXRtaW4tZGF0YS1pbm1ldC0yMDA4LTIwMTYtNHlycy1zb3V0aC5yZHMnKQpgYGAKPGZvbnQgc2l6ZT0iMyI+CjxwIHN0eWxlPSd0ZXh0LWFsaWduOiBqdXN0aWZ5Oyc+Cl9fKGEpX18gQSBhcGxpY2HDp8OjbyBkbyB0ZXN0ZSBkZSBDb25zaXN0w6puY2lhIEludGVybmEgJ2EnIG5hcyA4MCBFTUFzIHNlbGVjaW9uYWRhcyBnZXJvdSA4MCBFTUFzIHF1ZSBhcHJlc2VudGFyYW0gZGFkb3MgY29uc2lkZXJhZG9zIHN1c3BlaXRvcy4gQSBtw6lkaWEgZGEgcG9yY2VudGFnZW0gZGUgZGFkb3MgY29uc2lkZXJhZG9zIHN1c3BlaXRvcyBuZXNzZSB0ZXN0ZSBmb2kgMC4xNTExJSAo4omIIDExOSBob3JhcyksIGUgYSBFTUEgcXVlIGFwcmVzZW50b3UgYSBtYWlvciBwb3JjZW50YWdlbSBkZSBkYWRvcyBjb25zaWRlcmFkb3Mgc3VzcGVpdG9zIGZvaSBhIEE4NTEg4oCTIEl0YXBvw6EgKFNDKSwgY29tIDAuNjgxOCUgKDUzOCBob3JhcykgKFtUYWJlbGEgMDVdKCNUYWJlbGEgMDUpKS4KPC9wPgoKPGZvbnQgc2l6ZT0iMiI+CjxhIGlkID0gIlRhYmVsYSAwNSI+IDwvYT4KX19UYWJlbGEgMDVfXyDigJMgRU1BcyBjb20gbWFpb3IgbsO6bWVybyBkZSBkYWRvcyBjb25zaWRlcmFkb3Mgc3VzcGVpdG9zIG5vIHRlc3RlIFFDM2EgZW0gb3JkZW0gZGVjcmVzY2VudGUuCgpgYGB7ciwgZWNobz1GQUxTRX0KdDA0IDwtIHFjLnJlc3VsdHMudGFibGUoCiAgRElSRUNUT1JZID0gJy4uLy4uL2piYy1pYy9vdXRwdXQvcWMzYS1zdW1tYXJ5LXRtaW4tZGF0YS1pbm1ldC0yMDA4LTIwMTYtNHlycy1zb3V0aC5yZHMnLAogIEVNQVMgPSBlbWFzX3NlbCwKICBUSU1FID0gImhvdXJzIiwKIyAgUkVUVVJOID0gInRhYmxlIikKICBSRVRVUk4gPSAiZHQiKQoKdDA0CgojcmVzdWx0LnRleHQoUVJUX0RGID0gdDA0LCBUWVBFID0gImhvdXIiLCBURVNURSA9ICJDb25zaXN0w6puY2lhIEludGVybmEiLCBMRVRSQSA9ICJhIiwgTlVNRVJPX1RBQkVMQSA9ICIwNSIpCmBgYAoKX19GaWd1cmEgMDhfXyDigJMgRGlzdHJpYnVpw6fDo28gZXNwYWNpYWwgZGFzIEVNQXMgY29tIGRhZG9zIGNvbnNpZGVyYWRvcyBzdXNwZWl0b3Mgbm8gdGVzdGUgUUMzYS4KCiFbXSguLi9pbWFnZXMvaW1nX3FjM2EucG5nKQoKYGBge3IsIGV2YWw9RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0V9CnRleHQuc3VzcGVjdCgKICB0ZXN0X25hbWUgPSAiQ29uc2lzdMOqbmNpYSBJbnRlcm5hIiwKICB0ZXN0X3R5cGUgPSAiaG91cmx5IiwKICBzdW1tYXJ5X2xpbmsgPSBzdW1tYXJ5X2xpbmssCiAgcHJvZHVjdDNfbGluayA9ICcuLi8uLi9qYmMtaWMvb3V0cHV0L3FjM2Itc3VtbWFyeS10aW5zdC1kYXRhLWlubWV0LTIwMDgtMjAxNi00eXJzLXNvdXRoLnJkcycpCmBgYAo8Zm9udCBzaXplPSIzIj4KPHAgc3R5bGU9J3RleHQtYWxpZ246IGp1c3RpZnk7Jz4KX18oYilfXyBBIGFwbGljYcOnw6NvIGRvIHRlc3RlIGRlIENvbnNpc3TDqm5jaWEgSW50ZXJuYSAnYicgbmFzIDgwIEVNQXMgc2VsZWNpb25hZGFzIGdlcm91IDEyIEVNQXMgcXVlIGFwcmVzZW50YXJhbSBkYWRvcyBjb25zaWRlcmFkb3Mgc3VzcGVpdG9zLiBBIG3DqWRpYSBkYSBwb3JjZW50YWdlbSBkZSBkYWRvcyBjb25zaWRlcmFkb3Mgc3VzcGVpdG9zIG5lc3NlIHRlc3RlIGZvaSAwLjAwNjIlICjiiYggNSBob3JhcyksIGUgYSBFTUEgcXVlIGFwcmVzZW50b3UgYSBtYWlvciBwb3JjZW50YWdlbSBkZSBkYWRvcyBjb25zaWRlcmFkb3Mgc3VzcGVpdG9zIGZvaSBhIEE4ODAg4oCTIFZhY2FyaWEgKFJTKSwgY29tIDAuMDU1OCUgKDQ0IGhvcmFzKSAoW1RhYmVsYSAwNl0oI1RhYmVsYSAwNikpLgo8L3A+Cgo8Zm9udCBzaXplPSIyIj4KPGEgaWQgPSAiVGFiZWxhIDA2Ij4gPC9hPgpfX1RhYmVsYSAwNl9fIOKAkyBFTUFzIGNvbSBtYWlvciBuw7ptZXJvIGRlIGRhZG9zIGNvbnNpZGVyYWRvcyBzdXNwZWl0b3Mgbm8gdGVzdGUgUUMzYiBlbSBvcmRlbSBkZWNyZXNjZW50ZS4KCmBgYHtyLCBlY2hvPUZBTFNFfQp0MDUgPC0gcWMucmVzdWx0cy50YWJsZSgKICBESVJFQ1RPUlkgPSAnLi4vLi4vamJjLWljL291dHB1dC9xYzNiLXN1bW1hcnktdGluc3QtZGF0YS1pbm1ldC0yMDA4LTIwMTYtNHlycy1zb3V0aC5yZHMnLAogIEVNQVMgPSBlbWFzX3NlbCwKICBUSU1FID0gImhvdXJzIiwKIyAgUkVUVVJOID0gInRhYmxlIikKICBSRVRVUk4gPSAiZHQiKQoKdDA1CgojcmVzdWx0LnRleHQoUVJUX0RGID0gdDA1LCBUWVBFID0gImhvdXIiLCBURVNURSA9ICJDb25zaXN0w6puY2lhIEludGVybmEiLCBMRVRSQSA9ICJiIiwgTlVNRVJPX1RBQkVMQSA9ICIwNiIpCmBgYAoKX19GaWd1cmEgMDlfXyDigJMgRGlzdHJpYnVpw6fDo28gZXNwYWNpYWwgZGFzIEVNQXMgY29tIGRhZG9zIGNvbnNpZGVyYWRvcyBzdXNwZWl0b3Mgbm8gdGVzdGUgUUMzYi4KCiFbXSguLi9pbWFnZXMvaW1nX3FjM2IucG5nKQoKYGBge3IsIGV2YWw9RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0V9CnRleHQuc3VzcGVjdCgKICB0ZXN0X25hbWUgPSAiQ29uc2lzdMOqbmNpYSBJbnRlcm5hIiwKICB0ZXN0X3R5cGUgPSAiaG91cmx5IiwKICBzdW1tYXJ5X2xpbmsgPSBzdW1tYXJ5X2xpbmssCiAgcHJvZHVjdDNfbGluayA9ICcuLi8uLi9qYmMtaWMvb3V0cHV0L3FjM2Mtc3VtbWFyeS10YXZnLWRhdGEtaW5tZXQtMjAwOC0yMDE2LTR5cnMtc291dGgucmRzJykKYGBgCjxmb250IHNpemU9IjMiPgo8cCBzdHlsZT0ndGV4dC1hbGlnbjoganVzdGlmeTsnPgpfXyhjKV9fIEEgYXBsaWNhw6fDo28gZG8gdGVzdGUgZGUgQ29uc2lzdMOqbmNpYSBJbnRlcm5hICdjJyBuYXMgODAgRU1BcyBzZWxlY2lvbmFkYXMgZ2Vyb3UgNDUgRU1BcyBxdWUgYXByZXNlbnRhcmFtIGRhZG9zIGNvbnNpZGVyYWRvcyBzdXNwZWl0b3MuIEEgbcOpZGlhIGRhIHBvcmNlbnRhZ2VtIGRlIGRhZG9zIGNvbnNpZGVyYWRvcyBzdXNwZWl0b3MgbmVzc2UgdGVzdGUgZm9pIDAuMDc2OSUgKOKJiCA2MSBob3JhcyksIGUgYSBFTUEgcXVlIGFwcmVzZW50b3UgYSBtYWlvciBwb3JjZW50YWdlbSBkZSBkYWRvcyBjb25zaWRlcmFkb3Mgc3VzcGVpdG9zIGZvaSBhIEE4NDUg4oCTIE1vcnJvIERhIElncmVqYSAoQm9tIEphcmRpbSBEYSBTZXJyYSkgKFNDKSwgY29tIDEuMDY1NyUgKDg0MSBob3JhcykgKFtUYWJlbGEgMDddKCNUYWJlbGEgMDcpKS4KPC9wPgoKPGZvbnQgc2l6ZT0iMiI+CjxhIGlkID0gIlRhYmVsYSAwNyI+IDwvYT4KX19UYWJlbGEgMDdfXyDigJMgRU1BcyBjb20gbWFpb3IgbsO6bWVybyBkZSBkYWRvcyBjb25zaWRlcmFkb3Mgc3VzcGVpdG9zIG5vIHRlc3RlIFFDM2MgZW0gb3JkZW0gZGVjcmVzY2VudGUuCgpgYGB7ciwgZWNobz1GQUxTRX0KdDA2IDwtIHFjLnJlc3VsdHMudGFibGUoCiAgRElSRUNUT1JZID0gJy4uLy4uL2piYy1pYy9vdXRwdXQvcWMzYy1zdW1tYXJ5LXRhdmctZGF0YS1pbm1ldC0yMDA4LTIwMTYtNHlycy1zb3V0aC5yZHMnLAogIEVNQVMgPSBlbWFzX3NlbCwKICBUSU1FID0gImhvdXJzIiwKIyAgUkVUVVJOID0gInRhYmxlIikKICBSRVRVUk4gPSAiZHQiKQoKdDA2CgojcmVzdWx0LnRleHQoUVJUX0RGID0gdDA2LCBUWVBFID0gImhvdXIiLCBURVNURSA9ICJDb25zaXN0w6puY2lhIEludGVybmEiLCBMRVRSQSA9ICJjIiwgTlVNRVJPX1RBQkVMQSA9ICIwNyIpCmBgYAoKX19GaWd1cmEgMTBfXyDigJMgRGlzdHJpYnVpw6fDo28gZXNwYWNpYWwgZGFzIEVNQXMgY29tIGRhZG9zIGNvbnNpZGVyYWRvcyBzdXNwZWl0b3Mgbm8gdGVzdGUgUUMzYy4KCiFbXSguLi9pbWFnZXMvaW1nX3FjM2MucG5nKQoKYGBge3IsIGV2YWw9RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0V9CnRleHQuc3VzcGVjdCgKICB0ZXN0X25hbWUgPSAiQ29uc2lzdMOqbmNpYSBJbnRlcm5hIiwKICB0ZXN0X3R5cGUgPSAiZGFpbHkiLAogIHN1bW1hcnlfbGluayA9IHN1bW1hcnlfbGluaywKICBwcm9kdWN0M19saW5rID0gJy4uLy4uL2piYy1pYy9vdXRwdXQvcWMzZC1zdW1tYXJ5LXRhdmctZGF0YS1pbm1ldC0yMDA4LTIwMTYtNHlycy1zb3V0aC5yZHMnKQpgYGAKPGZvbnQgc2l6ZT0iMyI+CjxwIHN0eWxlPSd0ZXh0LWFsaWduOiBqdXN0aWZ5Oyc+Cl9fKGQpX18gQSBhcGxpY2HDp8OjbyBkbyB0ZXN0ZSBkZSBDb25zaXN0w6puY2lhIEludGVybmEgJ2QnIG5hcyA4MCBFTUFzIHNlbGVjaW9uYWRhcyBuw6NvIGdlcm91IG5lbmh1bWEgRU1BIHF1ZSBhcHJlc2VudG91IGRhZG9zIGNvbnNpZGVyYWRvcyBzdXNwZWl0b3MuCjwvcD4KCmBgYHtyLCBldmFsPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFfQp0ZXh0LnN1c3BlY3QoCiAgdGVzdF9uYW1lID0gIkNvbnNpc3TDqm5jaWEgSW50ZXJuYSIsCiAgdGVzdF90eXBlID0gImRhaWx5IiwKICBzdW1tYXJ5X2xpbmsgPSBzdW1tYXJ5X2xpbmssCiAgcHJvZHVjdDNfbGluayA9ICcuLi8uLi9qYmMtaWMvb3V0cHV0L3FjM2Utc3VtbWFyeS10bWF4LWRhdGEtaW5tZXQtMjAwOC0yMDE2LTR5cnMtc291dGgucmRzJykKYGBgCjxmb250IHNpemU9IjMiPgo8cCBzdHlsZT0ndGV4dC1hbGlnbjoganVzdGlmeTsnPgpfXyhlKV9fIEEgYXBsaWNhw6fDo28gZG8gdGVzdGUgZGUgQ29uc2lzdMOqbmNpYSBJbnRlcm5hICdlJyBuYXMgODAgRU1BcyBzZWxlY2lvbmFkYXMgZ2Vyb3UgNTcgRU1BcyBxdWUgYXByZXNlbnRhcmFtIGRhZG9zIGNvbnNpZGVyYWRvcyBzdXNwZWl0b3MuIEEgbcOpZGlhIGRhIHBvcmNlbnRhZ2VtIGRlIGRhZG9zIGNvbnNpZGVyYWRvcyBzdXNwZWl0b3MgbmVzc2UgdGVzdGUgZm9pIDAuMTM1JSAo4omIIDQgZGlhcyksIGUgYSBFTUEgcXVlIGFwcmVzZW50b3UgYSBtYWlvciBwb3JjZW50YWdlbSBkZSBkYWRvcyBjb25zaWRlcmFkb3Mgc3VzcGVpdG9zIGZvaSBhIEE4MDcg4oCTIEN1cml0aWJhIChQUiksIGNvbSAwLjYwODMlICgyMCBkaWFzKSAoW1RhYmVsYSAwOF0oI1RhYmVsYSAwOCkpLgo8L3A+Cgo8Zm9udCBzaXplPSIyIj4KPGEgaWQgPSAiVGFiZWxhIDA4Ij4gPC9hPgpfX1RhYmVsYSAwOF9fIOKAkyBFTUFzIGNvbSBtYWlvciBuw7ptZXJvIGRlIGRhZG9zIGNvbnNpZGVyYWRvcyBzdXNwZWl0b3Mgbm8gdGVzdGUgUUMzZSBlbSBvcmRlbSBkZWNyZXNjZW50ZS4KCmBgYHtyLCBlY2hvPUZBTFNFfQp0MDcgPC0gcWMucmVzdWx0cy50YWJsZSgKICBESVJFQ1RPUlkgPSAnLi4vLi4vamJjLWljL291dHB1dC9xYzNlLXN1bW1hcnktdG1heC1kYXRhLWlubWV0LTIwMDgtMjAxNi00eXJzLXNvdXRoLnJkcycsCiAgRU1BUyA9IGVtYXNfc2VsLAogIFRJTUUgPSAiZGF5cyIsCiMgIFJFVFVSTiA9ICJ0YWJsZSIpCiAgUkVUVVJOID0gImR0IikKCnQwNwoKI3Jlc3VsdC50ZXh0KFFSVF9ERiA9IHQwNywgVFlQRSA9ICJkYXkiLCBURVNURSA9ICJDb25zaXN0w6puY2lhIEludGVybmEiLCBMRVRSQSA9ICJlIiwgTlVNRVJPX1RBQkVMQSA9ICIwOCIpCmBgYAoKX19GaWd1cmEgMTFfXyDigJMgRGlzdHJpYnVpw6fDo28gZXNwYWNpYWwgZGFzIEVNQXMgY29tIGRhZG9zIGNvbnNpZGVyYWRvcyBzdXNwZWl0b3Mgbm8gdGVzdGUgUUMzZS4KCiFbXSguLi9pbWFnZXMvaW1nX3FjM2UucG5nKQoKYGBge3IsIGV2YWw9RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0V9CnRleHQuc3VzcGVjdCgKICB0ZXN0X25hbWUgPSAiQ29uc2lzdMOqbmNpYSBJbnRlcm5hIiwKICB0ZXN0X3R5cGUgPSAiZGFpbHkiLAogIHN1bW1hcnlfbGluayA9IHN1bW1hcnlfbGluaywKICBwcm9kdWN0M19saW5rID0gJy4uLy4uL2piYy1pYy9vdXRwdXQvcWMzZi1zdW1tYXJ5LXRtaW4tZGF0YS1pbm1ldC0yMDA4LTIwMTYtNHlycy1zb3V0aC5yZHMnKQpgYGAKPGZvbnQgc2l6ZT0iMyI+CjxwIHN0eWxlPSd0ZXh0LWFsaWduOiBqdXN0aWZ5Oyc+Cl9fKGYpX18gQSBhcGxpY2HDp8OjbyBkbyB0ZXN0ZSBkZSBDb25zaXN0w6puY2lhIEludGVybmEgJ2YnIG5hcyA4MCBFTUFzIHNlbGVjaW9uYWRhcyBnZXJvdSA2OSBFTUFzIHF1ZSBhcHJlc2VudGFyYW0gZGFkb3MgY29uc2lkZXJhZG9zIHN1c3BlaXRvcy4gQSBtw6lkaWEgZGEgcG9yY2VudGFnZW0gZGUgZGFkb3MgY29uc2lkZXJhZG9zIHN1c3BlaXRvcyBuZXNzZSB0ZXN0ZSBmb2kgMC4wOTA4JSAo4omIIDMgZGlhcyksIGUgYSBFTUEgcXVlIGFwcmVzZW50b3UgYSBtYWlvciBwb3JjZW50YWdlbSBkZSBkYWRvcyBjb25zaWRlcmFkb3Mgc3VzcGVpdG9zIGZvaSBhIEE4NTEg4oCTIEl0YXBvw6EgKFNDKSwgY29tIDAuMzk1NCUgKDEzIGRpYXMpIChbVGFiZWxhIDA5XSgjVGFiZWxhIDA5KSkuCjwvcD4KCjxmb250IHNpemU9IjIiPgo8YSBpZCA9ICJUYWJlbGEgMDkiPiA8L2E+Cl9fVGFiZWxhIDA5X18g4oCTIEVNQXMgY29tIG1haW9yIG7Dum1lcm8gZGUgZGFkb3MgY29uc2lkZXJhZG9zIHN1c3BlaXRvcyBubyB0ZXN0ZSBRQzNmIGVtIG9yZGVtIGRlY3Jlc2NlbnRlLgoKYGBge3IsIGVjaG89RkFMU0V9CnQwOCA8LSBxYy5yZXN1bHRzLnRhYmxlKAogIERJUkVDVE9SWSA9ICcuLi8uLi9qYmMtaWMvb3V0cHV0L3FjM2Ytc3VtbWFyeS10bWluLWRhdGEtaW5tZXQtMjAwOC0yMDE2LTR5cnMtc291dGgucmRzJywKICBFTUFTID0gZW1hc19zZWwsCiAgVElNRSA9ICJkYXlzIiwKIyAgUkVUVVJOID0gInRhYmxlIikKICBSRVRVUk4gPSAiZHQiKQoKdDA4CgojcmVzdWx0LnRleHQoUVJUX0RGID0gdDA4LCBUWVBFID0gImRheSIsIFRFU1RFID0gIkNvbnNpc3TDqm5jaWEgSW50ZXJuYSIsIExFVFJBID0gImYiLCBOVU1FUk9fVEFCRUxBID0gIjA5IikKYGBgCgpfX0ZpZ3VyYSAxMl9fIOKAkyBEaXN0cmlidWnDp8OjbyBlc3BhY2lhbCBkYXMgRU1BcyBjb20gZGFkb3MgY29uc2lkZXJhZG9zIHN1c3BlaXRvcyBubyB0ZXN0ZSBRQzNmLgoKIVtdKC4uL2ltYWdlcy9pbWdfcWMzZi5wbmcpCgoKIyMgPGZvbnQgc2l6ZT0iMy41Ij4gX18zLjQgQ29uc2lzdMOqbmNpYSBUZW1wb3JhbCAoUUM0KV9fCgo8Zm9udCBzaXplPSIzIj4KPHAgc3R5bGU9J3RleHQtYWxpZ246IGp1c3RpZnk7Jz4KX18oYSlfXyBFc3RlIGNvbnRyb2xlIGRlIHF1YWxpZGFkZSDDqSBkaXZpZG8gZW0gcGFydGVzLCBkZSBhY29yZG8gY29tIGEgdmFyaWHDp8OjbyBob3LDoXJpYSBkYSB0ZW1wZXJhdHVyYS4KPC9wPgoKYGBge3IsIGV2YWw9RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0V9CnRleHQuc3VzcGVjdCgKICB0ZXN0X25hbWUgPSAiQ29uc2lzdMOqbmNpYSBUZW1wb3JhbCIsCiAgdGVzdF90eXBlID0gImhvdXJseSIsCiAgc3VtbWFyeV9saW5rID0gc3VtbWFyeV9saW5rLAogIHByb2R1Y3QzX2xpbmsgPSAnLi4vLi4vamJjLWljL291dHB1dC9xYzRhLXN1bW1hcnktdGF2Zy0wMWgtZGF0YS1pbm1ldC0yMDA4LTIwMTYtNHlycy1zb3V0aC5yZHMnKQpgYGAKPHAgc3R5bGU9J3RleHQtYWxpZ246IGp1c3RpZnk7Jz4KKyBQYXJhIDEgaG9yYTogQSBhcGxpY2HDp8OjbyBkbyB0ZXN0ZSBkZSBDb25zaXN0w6puY2lhIFRlbXBvcmFsICdhJyBuYXMgODAgRU1BcyBzZWxlY2lvbmFkYXMgZ2Vyb3UgODAgRU1BcyBxdWUgYXByZXNlbnRhcmFtIGRhZG9zIGNvbnNpZGVyYWRvcyBzdXNwZWl0b3MuIEEgbcOpZGlhIGRhIHBvcmNlbnRhZ2VtIGRlIGRhZG9zIGNvbnNpZGVyYWRvcyBzdXNwZWl0b3MgbmVzc2UgdGVzdGUgZm9pIDAuMjcwNSUgKOKJiCAyMTMgaG9yYXMpLCBlIGEgRU1BIHF1ZSBhcHJlc2VudG91IGEgbWFpb3IgcG9yY2VudGFnZW0gZGUgZGFkb3MgY29uc2lkZXJhZG9zIHN1c3BlaXRvcyBmb2kgYSBBODc1IOKAkyBHZW5lcmFsIENhcm5laXJvIChQUiksIGNvbSAyLjAyNzYlICgxNjAwIGhvcmFzKSAoW1RhYmVsYSAxMF0oI1RhYmVsYSAxMCkpLgo8L3A+Cgo8Zm9udCBzaXplPSIyIj4KPGEgaWQgPSAiVGFiZWxhIDEwIj4gPC9hPgpfX1RhYmVsYSAxMF9fIOKAkyBFTUFzIGNvbSBtYWlvciBuw7ptZXJvIGRlIGRhZG9zIGNvbnNpZGVyYWRvcyBzdXNwZWl0b3Mgbm8gdGVzdGUgUUM0YSAoMWgpIGVtIG9yZGVtIGRlY3Jlc2NlbnRlLgoKYGBge3IsIGVjaG89RkFMU0V9CnQwOSA8LSBxYy5yZXN1bHRzLnRhYmxlKAogIERJUkVDVE9SWSA9ICcuLi8uLi9qYmMtaWMvb3V0cHV0L3FjNGEtc3VtbWFyeS10YXZnLTAxaC1kYXRhLWlubWV0LTIwMDgtMjAxNi00eXJzLXNvdXRoLnJkcycsCiAgRU1BUyA9IGVtYXNfc2VsLAogIFRJTUUgPSAiaG91cnMiLAojICBSRVRVUk4gPSAidGFibGUiKQogIFJFVFVSTiA9ICJkdCIpCgp0MDkKCiNyZXN1bHQudGV4dChRUlRfREYgPSB0MDksIFRZUEUgPSAiaG91ciIsIFRFU1RFID0gIkNvbnNpc3TDqm5jaWEgVGVtcG9yYWwiLCBMRVRSQSA9ICJhIiwgTlVNRVJPX1RBQkVMQSA9ICIxMCIpCmBgYAoKX19GaWd1cmEgMTNfXyDigJMgRGlzdHJpYnVpw6fDo28gZXNwYWNpYWwgZGFzIEVNQXMgY29tIGRhZG9zIGNvbnNpZGVyYWRvcyBzdXNwZWl0b3Mgbm8gdGVzdGUgUUM0YSAoMWgpLgoKIVtdKC4uL2ltYWdlcy9pbWdfcWM0YV8wMWgucG5nKQoKYGBge3IsIGV2YWw9RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0V9CnRleHQuc3VzcGVjdCgKICB0ZXN0X25hbWUgPSAiQ29uc2lzdMOqbmNpYSBUZW1wb3JhbCIsCiAgdGVzdF90eXBlID0gImhvdXJseSIsCiAgc3VtbWFyeV9saW5rID0gc3VtbWFyeV9saW5rLAogIHByb2R1Y3QzX2xpbmsgPSAnLi4vLi4vamJjLWljL291dHB1dC9xYzRhLXN1bW1hcnktdGF2Zy0wMmgtZGF0YS1pbm1ldC0yMDA4LTIwMTYtNHlycy1zb3V0aC5yZHMnKQpgYGAKPGZvbnQgc2l6ZT0iMyI+CjxwIHN0eWxlPSd0ZXh0LWFsaWduOiBqdXN0aWZ5Oyc+CisgUGFyYSAyIGhvcmE6IEEgYXBsaWNhw6fDo28gZG8gdGVzdGUgZGUgQ29uc2lzdMOqbmNpYSBUZW1wb3JhbCAnYScgbmFzIDgwIEVNQXMgc2VsZWNpb25hZGFzIGdlcm91IDgwIEVNQXMgcXVlIGFwcmVzZW50YXJhbSBkYWRvcyBjb25zaWRlcmFkb3Mgc3VzcGVpdG9zLiBBIG3DqWRpYSBkYSBwb3JjZW50YWdlbSBkZSBkYWRvcyBjb25zaWRlcmFkb3Mgc3VzcGVpdG9zIG5lc3NlIHRlc3RlIGZvaSAwLjMwMjklICjiiYggMjM5IGhvcmFzKSwgZSBhIEVNQSBxdWUgYXByZXNlbnRvdSBhIG1haW9yIHBvcmNlbnRhZ2VtIGRlIGRhZG9zIGNvbnNpZGVyYWRvcyBzdXNwZWl0b3MgZm9pIGEgQTg3NSDigJMgR2VuZXJhbCBDYXJuZWlybyAoUFIpLCBjb20gMi40ODM4JSAoMTk2MCBob3JhcykgKFtUYWJlbGEgMTFdKCNUYWJlbGEgMTEpKS4KPC9wPgoKPGZvbnQgc2l6ZT0iMiI+CjxhIGlkID0gIlRhYmVsYSAxMSI+IDwvYT4KX19UYWJlbGEgMTFfXyDigJMgRU1BcyBjb20gbWFpb3IgbsO6bWVybyBkZSBkYWRvcyBjb25zaWRlcmFkb3Mgc3VzcGVpdG9zIG5vIHRlc3RlIFFDNGEgKDJoKSBlbSBvcmRlbSBkZWNyZXNjZW50ZS4KCmBgYHtyLCBlY2hvPUZBTFNFfQp0MTAgPC0gcWMucmVzdWx0cy50YWJsZSgKICBESVJFQ1RPUlkgPSAnLi4vLi4vamJjLWljL291dHB1dC9xYzRhLXN1bW1hcnktdGF2Zy0wMmgtZGF0YS1pbm1ldC0yMDA4LTIwMTYtNHlycy1zb3V0aC5yZHMnLAogIEVNQVMgPSBlbWFzX3NlbCwKICBUSU1FID0gImhvdXJzIiwKIyAgUkVUVVJOID0gInRhYmxlIikKICBSRVRVUk4gPSAiZHQiKQoKdDEwCgojcmVzdWx0LnRleHQoUVJUX0RGID0gdDEwLCBUWVBFID0gImhvdXIiLCBURVNURSA9ICJDb25zaXN0w6puY2lhIFRlbXBvcmFsIiwgTEVUUkEgPSAiYSIsIE5VTUVST19UQUJFTEEgPSAiMTEiKQpgYGAKCl9fRmlndXJhIDE0X18g4oCTIERpc3RyaWJ1acOnw6NvIGVzcGFjaWFsIGRhcyBFTUFzIGNvbSBkYWRvcyBjb25zaWRlcmFkb3Mgc3VzcGVpdG9zIG5vIHRlc3RlIFFDNGEgKDJoKS4KCiFbXSguLi9pbWFnZXMvaW1nX3FjNGFfMDJoLnBuZykKCmBgYHtyLCBldmFsPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFfQp0ZXh0LnN1c3BlY3QoCiAgdGVzdF9uYW1lID0gIkNvbnNpc3TDqm5jaWEgVGVtcG9yYWwiLAogIHRlc3RfdHlwZSA9ICJob3VybHkiLAogIHN1bW1hcnlfbGluayA9IHN1bW1hcnlfbGluaywKICBwcm9kdWN0M19saW5rID0gJy4uLy4uL2piYy1pYy9vdXRwdXQvcWM0YS1zdW1tYXJ5LXRhdmctMDNoLWRhdGEtaW5tZXQtMjAwOC0yMDE2LTR5cnMtc291dGgucmRzJykKYGBgCjxmb250IHNpemU9IjMiPgo8cCBzdHlsZT0ndGV4dC1hbGlnbjoganVzdGlmeTsnPgorIFBhcmEgMyBob3JhOiBBIGFwbGljYcOnw6NvIGRvIHRlc3RlIGRlIENvbnNpc3TDqm5jaWEgVGVtcG9yYWwgJ2EnIG5hcyA4MCBFTUFzIHNlbGVjaW9uYWRhcyBnZXJvdSA4MCBFTUFzIHF1ZSBhcHJlc2VudGFyYW0gZGFkb3MgY29uc2lkZXJhZG9zIHN1c3BlaXRvcy4gQSBtw6lkaWEgZGEgcG9yY2VudGFnZW0gZGUgZGFkb3MgY29uc2lkZXJhZG9zIHN1c3BlaXRvcyBuZXNzZSB0ZXN0ZSBmb2kgMC4zNzY3JSAo4omIIDI5NyBob3JhcyksIGUgYSBFTUEgcXVlIGFwcmVzZW50b3UgYSBtYWlvciBwb3JjZW50YWdlbSBkZSBkYWRvcyBjb25zaWRlcmFkb3Mgc3VzcGVpdG9zIGZvaSBhIEE4NzUg4oCTIEdlbmVyYWwgQ2FybmVpcm8gKFBSKSwgY29tIDMuMTI4OCUgKDI0NjkgaG9yYXMpIChbVGFiZWxhIDEyXSgjVGFiZWxhIDEyKSkuCjwvcD4KCjxmb250IHNpemU9IjIiPgo8YSBpZCA9ICJUYWJlbGEgMTIiPiA8L2E+Cl9fVGFiZWxhIDEyX18g4oCTIEVNQXMgY29tIG1haW9yIG7Dum1lcm8gZGUgZGFkb3MgY29uc2lkZXJhZG9zIHN1c3BlaXRvcyBubyB0ZXN0ZSBRQzRhICgzaCkgZW0gb3JkZW0gZGVjcmVzY2VudGUuCgpgYGB7ciwgZWNobz1GQUxTRX0KdDExIDwtIHFjLnJlc3VsdHMudGFibGUoCiAgRElSRUNUT1JZID0gJy4uLy4uL2piYy1pYy9vdXRwdXQvcWM0YS1zdW1tYXJ5LXRhdmctMDNoLWRhdGEtaW5tZXQtMjAwOC0yMDE2LTR5cnMtc291dGgucmRzJywKICBFTUFTID0gZW1hc19zZWwsCiAgVElNRSA9ICJob3VycyIsCiMgIFJFVFVSTiA9ICJ0YWJsZSIpCiAgUkVUVVJOID0gImR0IikKCnQxMQoKI3Jlc3VsdC50ZXh0KFFSVF9ERiA9IHQxMSwgVFlQRSA9ICJob3VyIiwgVEVTVEUgPSAiQ29uc2lzdMOqbmNpYSBUZW1wb3JhbCIsIExFVFJBID0gImEiLCBOVU1FUk9fVEFCRUxBID0gIjEyIikKYGBgCgpfX0ZpZ3VyYSAxNV9fIOKAkyBEaXN0cmlidWnDp8OjbyBlc3BhY2lhbCBkYXMgRU1BcyBjb20gZGFkb3MgY29uc2lkZXJhZG9zIHN1c3BlaXRvcyBubyB0ZXN0ZSBRQzRhICgzaCkuCgohW10oLi4vaW1hZ2VzL2ltZ19xYzRhXzAzaC5wbmcpCgpgYGB7ciwgZXZhbD1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRX0KdGV4dC5zdXNwZWN0KAogIHRlc3RfbmFtZSA9ICJDb25zaXN0w6puY2lhIFRlbXBvcmFsIiwKICB0ZXN0X3R5cGUgPSAiaG91cmx5IiwKICBzdW1tYXJ5X2xpbmsgPSBzdW1tYXJ5X2xpbmssCiAgcHJvZHVjdDNfbGluayA9ICcuLi8uLi9qYmMtaWMvb3V0cHV0L3FjNGEtc3VtbWFyeS10YXZnLTA2aC1kYXRhLWlubWV0LTIwMDgtMjAxNi00eXJzLXNvdXRoLnJkcycpCmBgYAo8Zm9udCBzaXplPSIzIj4KPHAgc3R5bGU9J3RleHQtYWxpZ246IGp1c3RpZnk7Jz4KKyBQYXJhIDYgaG9yYTogQSBhcGxpY2HDp8OjbyBkbyB0ZXN0ZSBkZSBDb25zaXN0w6puY2lhIFRlbXBvcmFsICdhJyBuYXMgODAgRU1BcyBzZWxlY2lvbmFkYXMgZ2Vyb3UgNzIgRU1BcyBxdWUgYXByZXNlbnRhcmFtIGRhZG9zIGNvbnNpZGVyYWRvcyBzdXNwZWl0b3MuIEEgbcOpZGlhIGRhIHBvcmNlbnRhZ2VtIGRlIGRhZG9zIGNvbnNpZGVyYWRvcyBzdXNwZWl0b3MgbmVzc2UgdGVzdGUgZm9pIDAuMTUzOCUgKOKJiCAxMjEgaG9yYXMpLCBlIGEgRU1BIHF1ZSBhcHJlc2VudG91IGEgbWFpb3IgcG9yY2VudGFnZW0gZGUgZGFkb3MgY29uc2lkZXJhZG9zIHN1c3BlaXRvcyBmb2kgYSBBODc1IOKAkyBHZW5lcmFsIENhcm5laXJvIChQUiksIGNvbSAxLjY3NzglICgxMzI0IGhvcmFzKSAoW1RhYmVsYSAxM10oI1RhYmVsYSAxMykpLgo8L3A+Cgo8Zm9udCBzaXplPSIyIj4KPGEgaWQgPSAiVGFiZWxhIDEzIj4gPC9hPgpfX1RhYmVsYSAxM19fIOKAkyBFTUFzIGNvbSBtYWlvciBuw7ptZXJvIGRlIGRhZG9zIGNvbnNpZGVyYWRvcyBzdXNwZWl0b3Mgbm8gdGVzdGUgUUM0YSAoNmgpIGVtIG9yZGVtIGRlY3Jlc2NlbnRlLgoKYGBge3IsIGVjaG89RkFMU0V9CnQxMiA8LSBxYy5yZXN1bHRzLnRhYmxlKAogIERJUkVDVE9SWSA9ICcuLi8uLi9qYmMtaWMvb3V0cHV0L3FjNGEtc3VtbWFyeS10YXZnLTA2aC1kYXRhLWlubWV0LTIwMDgtMjAxNi00eXJzLXNvdXRoLnJkcycsCiAgRU1BUyA9IGVtYXNfc2VsLAogIFRJTUUgPSAiaG91cnMiLAojICBSRVRVUk4gPSAidGFibGUiKQogIFJFVFVSTiA9ICJkdCIpCgp0MTIKCiNyZXN1bHQudGV4dChRUlRfREYgPSB0MTIsIFRZUEUgPSAiaG91ciIsIFRFU1RFID0gIkNvbnNpc3TDqm5jaWEgVGVtcG9yYWwiLCBMRVRSQSA9ICJhIiwgTlVNRVJPX1RBQkVMQSA9ICIxMyIpCmBgYAoKX19GaWd1cmEgMTZfXyDigJMgRGlzdHJpYnVpw6fDo28gZXNwYWNpYWwgZGFzIEVNQXMgY29tIGRhZG9zIGNvbnNpZGVyYWRvcyBzdXNwZWl0b3Mgbm8gdGVzdGUgUUM0YSAoMTJoKS4KCiFbXSguLi9pbWFnZXMvaW1nX3FjNGFfMDZoLnBuZykKCmBgYHtyLCBldmFsPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFfQp0ZXh0LnN1c3BlY3QoCiAgdGVzdF9uYW1lID0gIkNvbnNpc3TDqm5jaWEgVGVtcG9yYWwiLAogIHRlc3RfdHlwZSA9ICJob3VybHkiLAogIHN1bW1hcnlfbGluayA9IHN1bW1hcnlfbGluaywKICBwcm9kdWN0M19saW5rID0gJy4uLy4uL2piYy1pYy9vdXRwdXQvcWM0YS1zdW1tYXJ5LXRhdmctMTJoLWRhdGEtaW5tZXQtMjAwOC0yMDE2LTR5cnMtc291dGgucmRzJykKYGBgCjxmb250IHNpemU9IjMiPgo8cCBzdHlsZT0ndGV4dC1hbGlnbjoganVzdGlmeTsnPgorIFBhcmEgMTIgaG9yYTogQSBhcGxpY2HDp8OjbyBkbyB0ZXN0ZSBkZSBDb25zaXN0w6puY2lhIFRlbXBvcmFsICdhJyBuYXMgODAgRU1BcyBzZWxlY2lvbmFkYXMgZ2Vyb3UgMSBFTUEgcXVlIGFwcmVzZW50b3UgZGFkb3MgY29uc2lkZXJhZG9zIHN1c3BlaXRvcy4gQSBtw6lkaWEgZGEgcG9yY2VudGFnZW0gZGUgZGFkb3MgY29uc2lkZXJhZG9zIHN1c3BlaXRvcyBuZXNzZSB0ZXN0ZSBmb2kgMC4wMDEzJSAo4omIIDEgaG9yYSksIGUgYSBFTUEgcXVlIGFwcmVzZW50b3UgYSBtYWlvciBwb3JjZW50YWdlbSBkZSBkYWRvcyBjb25zaWRlcmFkb3Mgc3VzcGVpdG9zIGZvaSBhIEE4NzUg4oCTIEdlbmVyYWwgQ2FybmVpcm8gKFBSKSwgY29tIDAuMDAxMyUgKDEgaG9yYSkgKFtUYWJlbGEgMTRdKCNUYWJlbGEgMTQpKS4KPC9wPgoKPGZvbnQgc2l6ZT0iMiI+CjxhIGlkID0gIlRhYmVsYSAxNCI+IDwvYT4KX19UYWJlbGEgMTRfXyDigJMgRU1BcyBjb20gbWFpb3IgbsO6bWVybyBkZSBkYWRvcyBjb25zaWRlcmFkb3Mgc3VzcGVpdG9zIG5vIHRlc3RlIFFDNGEgKDNoKSBlbSBvcmRlbSBkZWNyZXNjZW50ZS4KCmBgYHtyLCBlY2hvPUZBTFNFfQp0MTMgPC0gcWMucmVzdWx0cy50YWJsZSgKICBESVJFQ1RPUlkgPSAnLi4vLi4vamJjLWljL291dHB1dC9xYzRhLXN1bW1hcnktdGF2Zy0xMmgtZGF0YS1pbm1ldC0yMDA4LTIwMTYtNHlycy1zb3V0aC5yZHMnLAogIEVNQVMgPSBlbWFzX3NlbCwKICBUSU1FID0gImhvdXJzIiwKIyAgUkVUVVJOID0gInRhYmxlIikKICBSRVRVUk4gPSAiZHQiKQoKdDEzCgojcmVzdWx0LnRleHQoUVJUX0RGID0gdDEzLCBUWVBFID0gImhvdXIiLCBURVNURSA9ICJDb25zaXN0w6puY2lhIFRlbXBvcmFsIiwgTEVUUkEgPSAiYSIsIE5VTUVST19UQUJFTEEgPSAiMTQiKQpgYGAKCiMjIDxmb250IHNpemU9IjMuNSI+IF9fMy42IFJlZ3Jlc3PDo28gRXNwYWNpYWwgKFFDNilfXwoKYGBge3IsIGV2YWw9RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0V9CnRleHQuc3VzcGVjdCgKICB0ZXN0X25hbWUgPSAiUmVncmVzc8OjbyBFc3BhY2lhbCIsCiAgdGVzdF90eXBlID0gImRhaWx5IiwKICBzdW1tYXJ5X2xpbmsgPSBzdW1tYXJ5X2xpbmssCiAgcHJvZHVjdDNfbGluayA9ICcuLi8uLi9qYmMtaWMvb3V0cHV0L3FjNmEtc3VtbWFyeS10YXZnLWRhdGEtaW5tZXQtMjAwOC0yMDE2LTR5cnMtc291dGgucmRzJykKYGBgCjxmb250IHNpemU9IjMiPgo8cCBzdHlsZT0ndGV4dC1hbGlnbjoganVzdGlmeTsnPgpfXyhhKV9fIEEgYXBsaWNhw6fDo28gZG8gdGVzdGUgZGUgUmVncmVzc8OjbyBFc3BhY2lhbCAnYScgbmFzIDgwIEVNQXMgc2VsZWNpb25hZGFzIGdlcm91IDcwIEVNQXMgcXVlIGFwcmVzZW50YXJhbSBkYWRvcyBjb25zaWRlcmFkb3Mgc3VzcGVpdG9zLiBBIG3DqWRpYSBkYSBwb3JjZW50YWdlbSBkZSBkYWRvcyBjb25zaWRlcmFkb3Mgc3VzcGVpdG9zIG5lc3NlIHRlc3RlIGZvaSAwLjA4NTYlICjiiYggMyBkaWFzKSwgZSBhIEVNQSBxdWUgYXByZXNlbnRvdSBhIG1haW9yIHBvcmNlbnRhZ2VtIGRlIGRhZG9zIGNvbnNpZGVyYWRvcyBzdXNwZWl0b3MgZm9pIGEgQTg0MiDigJMgTm92YSBGw6F0aW1hIChQUiksIGNvbSAwLjM2NSUgKDEyIGRpYXMpIChbVGFiZWxhIDE1XSgjVGFiZWxhIDE1KSkuCjwvcD4KCjxmb250IHNpemU9IjIiPgo8YSBpZCA9ICJUYWJlbGEgMDQiPiA8L2E+Cl9fVGFiZWxhIDE1X18g4oCTIEVNQXMgY29tIG1haW9yIG7Dum1lcm8gZGUgZGFkb3MgY29uc2lkZXJhZG9zIHN1c3BlaXRvcyBubyB0ZXN0ZSBRQzJhIGVtIG9yZGVtIGRlY3Jlc2NlbnRlLgoKYGBge3IsIGVjaG89RkFMU0V9CnQxNCA8LSBxYy5yZXN1bHRzLnRhYmxlKAogIERJUkVDVE9SWSA9ICcuLi8uLi9qYmMtaWMvb3V0cHV0L3FjNmEtc3VtbWFyeS10YXZnLWRhdGEtaW5tZXQtMjAwOC0yMDE2LTR5cnMtc291dGgucmRzJywKICBFTUFTID0gZW1hc19zZWwsCiAgVElNRSA9ICJkYXlzIiwKIyAgUkVUVVJOID0gInRhYmxlIikKICBSRVRVUk4gPSAiZHQiKQoKdDE0CgojcmVzdWx0LnRleHQoUVJUX0RGID0gdDAzLCBUWVBFID0gImhvdXIiLCBURVNURSA9ICJQZXJzaXN0w6puY2lhIFRlbXBvcmFsIiwgTEVUUkEgPSAiYSIsIE5VTUVST19UQUJFTEEgPSAiMDQiKQpgYGAKCl9fRmlndXJhIDE3X18g4oCTIERpc3RyaWJ1acOnw6NvIGVzcGFjaWFsIGRhcyBFTUFzIGNvbSBkYWRvcyBjb25zaWRlcmFkb3Mgc3VzcGVpdG9zIG5vIHRlc3RlIFFDNmEuCgohW10oLi4vaW1hZ2VzL2ltZ19xYzZhLnBuZykKCiMjIDxmb250IHNpemU9IjMuNSI+IF9fMy43IFJlc3VtbyBkb3MgUmVzdWx0YWRvc19fCgojIyMgPGZvbnQgc2l6ZT0iMyI+IF9fMy43LjEgRGFkb3MgY29uc2lkZXJhZG9zIHN1c3BlaXRvcyBwb3IgRU1BX18KCjxmb250IHNpemU9IjIiPgpfX1RhYmVsYSAxNV9fIOKAkyBUb3RhbCBhYnNvbHV0byBkZSBkYWRvcyBjb25zaWRlcmFkb3Mgc3VzcGVpdG9zIGVtIGNhZGEgRU1BLgoKYGBge3IsIGVjaG89RkFMU0V9CnN1c3BlY3QuYnkuc2l0ZShESVJFQ1RPUlkgPSBkaXJlY3RvcnksIFNVTU1BUlkgPSBlbWFzX3NlbCwgVEFCTEUgPSBUUlVFKQpgYGAKCjxmb250IHNpemU9IjIiPgo8cCBzdHlsZT0ndGV4dC1hbGlnbjoganVzdGlmeTsnPgpfTm90YTpfCiogdG90YWwgZGUgZGFkb3MgaG9yw6FyaW9zIHN1c3BlaXRvcyBkZXRlY3RhZG9zIG5vcyB0ZXN0ZXMgcWMxYSwgcWMxYiwgcWMyYSwgcWMzYSwgcWMzYiwgcWMzYyBlIHFjNGEgKDFoLCAyaCwgM2gsIDZoIGUgMTJoKTsKKiogdG90YWwgZGUgZGFkb3MgZGnDoXJpb3Mgc3VzcGVpdG9zIGRldGVjdGFkb3Mgbm9zIHRlc3RlcyBxYzNkLCBxYzNlIGUgcWMzZi4KPHAgc3R5bGU9J3RleHQtYWxpZ246IGp1c3RpZnk7Jz4KCl9fRmlndXJhIDE3X18g4oCTIERpc3RyaWJ1acOnw6NvIGVzcGFjaWFsIGRhcyBFTUFzIGNvbSBtYWlvciBxdWFudGlkYWRlIGFic29sdXRhIGRlIGRhZG9zIChhKSBob3LDoXJpb3MgZSAoYikgZGnDoXJpb3MgY29uc2lkZXJhZG9zIHN1c3BlaXRvcwoKIVtdKC4uL2ltYWdlcy9pbWdfdG90RU1BLnBuZykKCiMjIyA8Zm9udCBzaXplPSIzIj4gX18zLjcuMiBEYWRvcyBjb25zaWRlcmFkb3Mgc3VzcGVpdG9zIHBvciBRQ19fCgo8Zm9udCBzaXplPSIyIj4KX19UYWJlbGEgMTZfXyDigJMgVG90YWwgYWJzb2x1dG8gZGUgZGFkb3MgY29uc2lkZXJhZG9zIHN1c3BlaXRvcyBlbSBjYWRhIHRlc3RlLgoKYGBge3IsIGVjaG89RkFMU0V9CnNicWMgPC0gc3VzcGVjdC5ieS5xYyhESVJFQ1RPUlkgPSBkaXJlY3RvcnksIFRBQkxFID0gVFJVRSkKCmRmIDwtICgoc2JxYyR4JGRhdGEpWy0xXSkKbmFtZXMoZGYpWzJdIDwtICd0aXBvJwpkZlsyXSA8LSBzdWJzdHIoZGYkdGlwbywgMSwxKQpkZls0XSA8LSBhcy5udW1lcmljKGRmW1s0XV0pCgpkZiAlPiUgZmlsdGVyKHRpcG8gPT0gJ2gnKSAlPiUgYXJyYW5nZShkZXNjKFN1c3BlaXRvcykpCmRmICU+JSBmaWx0ZXIodGlwbyA9PSAnZCcpICU+JSBhcnJhbmdlKGRlc2MoU3VzcGVpdG9zKSkKCgpgYGAKCiMjIyA8Zm9udCBzaXplPSIzIj4gX18zLjcuMyBEYWRvcyBjb25zaWRlcmFkb3Mgc3VzcGVpdG9zIHBvciBlc3RhZG9fXwoKPGZvbnQgc2l6ZT0iMiI+Cl9fVGFiZWxhIDE3X18g4oCTIFRvdGFsIGFic29sdXRvIGRlIGRhZG9zIGhvcsOhcmlvcyBlIGRpw6FyaW9zIGNvbnNpZGVyYWRvcyBzdXNwZWl0b3MgcG9yIGVzdGFkbwoKYGBge3IsIGVjaG89RkFMU0V9CgpzYnMgPC0gc3VzcGVjdC5ieS5zaXRlKERJUkVDVE9SWSA9IGRpcmVjdG9yeSwgU1VNTUFSWSA9IGVtYXNfc2VsKQoKc3VzdGF0ZSA8LQogIHNicyAlPiUgCiAgZHBseXI6OmFycmFuZ2UoZGVzYyhzdXNwZWN0X2hvdXIpKSAlPiUgCiAgZHBseXI6OmFycmFuZ2Uoc3RhdGUsIHNpdGUpICU+JSAKICBkcGx5cjo6Z3JvdXBfYnkoc3RhdGUpICU+JQogIGRwbHlyOjpzdW1tYXJpc2UoCiAgICBzdXNwZWN0X2ggPSBzdW0oc3VzcGVjdF9ob3VyLCBuYS5ybSA9IFRSVUUpLAogICAgc3VzcGVjdF9kID0gc3VtKHN1c3BlY3RfZGF5LCBuYS5ybSA9IFRSVUUpKSAlPiUgCiAgZHBseXI6OnVuZ3JvdXAoKSAlPiUgCiAgZHBseXI6OmFycmFuZ2Uoc3RhdGUpCm5hbWVzKHN1c3RhdGUpWzFdIDwtICJFc3RhZG8iCm5hbWVzKHN1c3RhdGUpWzJdIDwtICJTdXNwZWl0b3MqIChlbSBob3JhcykiCm5hbWVzKHN1c3RhdGUpWzNdIDwtICJTdXNwZWl0b3MqKiAoZW0gZGlhcykiCkRUOjpkYXRhdGFibGUoc3VzdGF0ZSkKYGBgCgo8Zm9udCBzaXplPSIyIj4KPHAgc3R5bGU9J3RleHQtYWxpZ246IGp1c3RpZnk7Jz4KX05vdGE6XwoqIHRvdGFsIGRlIGRhZG9zIGhvcsOhcmlvcyBzdXNwZWl0b3MgZGV0ZWN0YWRvcyBub3MgdGVzdGVzIHFjMWEsIHFjMWIsIHFjMmEsIHFjM2EsIHFjM2IsIHFjM2MgZSBxYzRhICgxaCwgMmgsIDNoLCA2aCBlIDEyaCk7CioqIHRvdGFsIGRlIGRhZG9zIGRpw6FyaW9zIHN1c3BlaXRvcyBkZXRlY3RhZG9zIG5vcyB0ZXN0ZXMgcWMzZCwgcWMzZSBlIHFjM2YuCjwvcD4KCiMgPGZvbnQgc2l6ZT0iNCI+IF9fNC4gQ09OQ0xVU8ODT19fCgo8Zm9udCBzaXplPSIzIj4KPHAgc3R5bGU9J3RleHQtYWxpZ246IGp1c3RpZnk7Jz4KU29tYW5kbyBvcyByZXN1bHRhZG9zIGRvcyB0ZXN0ZXMsIGFzIGVzdGHDp8O1ZXMgcXVlIGFwcmVzZW50YXJhbSBvIG1haW9yIG7Dum1lcm8gZGUgZGFkb3Mgc3VzcGVpdG9zIG5vcyB0ZXN0ZXMgaG9yw6FyaW9zIGZvcmFtOiBBODc1IOKAkyBHZW5lcmFsIENhcm5laXJvIChQUikgY29tIDEwODk1IGhvcmFzLCBBODQ1IOKAkyBNb3JybyBEYSBJZ3JlamEvQm9tIEphcmRpbSBkYSBTZXJyYSAoU0MpIGNvbSA4NDYxIGhvcmFzIGUgQTgzNCDigJMgVHJhbWFuZGHDrSAoUlMpIGNvbSA3ODIwIGhvcmFzOyBub3MgdGVzdGVzIGRpw6FyaW9zIGZvcmFtOiBBODA3IOKAkyBDdXJpdGliYSAoUFIpIGNvbSAyNyBkaWFzLCBBODUxIOKAkyBJdGFscMOzYSAoU0MpIGNvbSAyMiBkaWFzIGUgQTgyNCDigJMgSWNhcmHDrW1hIChQUikgY29tIDE5IGRpYXMuIAo8L3A+Cgo8cCBzdHlsZT0ndGV4dC1hbGlnbjoganVzdGlmeTsnPgpObyBnZXJhbCwgZW1ib3JhIGEgbWFpb3JpYSBkYSBlc3Rhw6fDtWVzIG1ldGVvcm9sw7NnaWNhcyBhdXRvbcOhdGljYXMgdGVuaGFtIGFwcmVzZW50YWRvIGFvIG3DrW5pbW8gdW0gdGVzdGUgb25kZSBmb3JhbSBkZXRlY3RhZG9zIGRhZG9zIHN1c3BlaXRvcywgYSBwb3JjZW50YWdlbSBkZSBkYWRvcyBzdXNwZWl0b3MgZGV0ZWN0YWRhIGVtIGNhZGEgZXN0YcOnw6NvLCBlbSByZWxhw6fDo28gYW8gbsO6bWVybyB0b3RhbCBkZSBob3JhcyBkZSBkYWRvcyBuYSBtZXNtYSwgw6kgc3VmaWNpZW50ZW1lbnRlIHBlcXVlbm8uCjwvcD4KCiMgPGZvbnQgc2l6ZT0iNCI+IF9fNS4gUkVGRVLDik5DSUFTIEJJQkxJT0dSw4FGSUNBU19fCgo8Zm9udCBzaXplPSIzIj4KCjxhIGlkID0gIm9wZW5haXIiPiA8L2E+CkNhcnNsYXcsIEQuIEMuIGFuZCBLLiBSb3BraW5zLCBfXygyMDEyKSBvcGVuYWlyIC0tLSBhbiBSIHBhY2thZ2UgZm9yIGFpciBxdWFsaXR5IGRhdGEgYW5hbHlzaXMuX18gRW52aXJvbm1lbnRhbCBNb2RlbGxpbmcgJiBTb2Z0d2FyZS4gVm9sdW1lIDI3LTI4LCA1Mi02MS4gPGh0dHBzOi8vY3Jhbi5yLXByb2plY3Qub3JnL3dlYi9wYWNrYWdlcy9vcGVuYWlyL2luZGV4Lmh0bWw+Cgo8YSBpZCA9ICJwYWRyIj4gPC9hPgpFZHdpbiBUaG9lbiAoMjAxNykuIF9fcGFkcjogUXVpY2tseSBHZXQgRGF0ZXRpbWUgRGF0YSBSZWFkeSBmb3IgQW5hbHlzaXMuX18gUiBwYWNrYWdlIHZlcnNpb24gMC4zLjAuIDxodHRwczovL0NSQU4uUi1wcm9qZWN0Lm9yZy9wYWNrYWdlPXBhZHI+Cgo8YSBpZCA9ICJFU1TDiVZFWiBlbCBhbC4sIDIwMTEiPiA8L2E+CkVTVMOJVkVaLCBKLiBldCBhbC4gX19HdWlkZWxpbmVzIG9uIHZhbGlkYXRpb24gcHJvY2VkdXJlcyBmb3IgbWV0ZW9yb2xvZ2ljYWwgZGF0YSBmcm9tIGF1dG9tYXRpYyB3ZWF0aGVyIHN0YXRpb25zLl9fIEpvdXJuYWwgb2YgSHlkcm9sb2d5LCBwLiAxNDcsIDIwMTEuIDxodHRwczovL3d3dy5zY2llbmNlZGlyZWN0LmNvbS9zY2llbmNlL2FydGljbGUvcGlpL1MwMDIyMTY5NDExMDAxNTk0PgoKPGEgaWQgPSAibHVicmlkYXRlIj4gPC9hPgpHYXJyZXR0IEdyb2xlbXVuZCwgSGFkbGV5IFdpY2toYW0gKDIwMTEpLiBfX0RhdGVzIGFuZCBUaW1lcyBNYWRlIEVhc3kgd2l0aCBsdWJyaWRhdGUuX18gSm91cm5hbCBvZiBTdGF0aXN0aWNhbCBTb2Z0d2FyZSwgNDAoMyksIDEtMjUuIFVSTCA8aHR0cDovL3d3dy5qc3RhdHNvZnQub3JnL3Y0MC9pMDMvPi4KCjxhIGlkID0gImRwbHlyIj4gPC9hPgpIYWRsZXkgV2lja2hhbSwgUm9tYWluIEZyYW5jb2lzLCBMaW9uZWwgSGVucnkgYW5kIEtpcmlsbCBNw7xsbGVyICgyMDE3KS4gX19kcGx5cjogQSBHcmFtbWFyIG9mIERhdGEgTWFuaXB1bGF0aW9uLl9fIFIgcGFja2FnZSB2ZXJzaW9uIDAuNy40LiA8aHR0cHM6Ly9DUkFOLlItcHJvamVjdC5vcmcvcGFja2FnZT1kcGx5cj4KCjxhIGlkID0gImdncGxvdDIiPiA8L2E+CkguIFdpY2toYW0uIF9fZ2dwbG90MjogRWxlZ2FudCBHcmFwaGljcyBmb3IgRGF0YSBBbmFseXNpcy5fXyBTcHJpbmdlci1WZXJsYWcgTmV3IFlvcmssIDIwMDkgPGh0dHBzOi8vY3Jhbi5yLXByb2plY3Qub3JnL3dlYi9wYWNrYWdlcy9nZ3Bsb3QyL2luZGV4Lmh0bWw+Cgo8YSBpZCA9ICJzY2FsZXMiPiA8L2E+CkhhZGxleSBXaWNraGFtICgyMDE3KS4gX19zY2FsZXM6IFNjYWxlIEZ1bmN0aW9ucyBmb3IgVmlzdWFsaXphdGlvbi5fXyBSIHBhY2thZ2UgdmVyc2lvbiAwLjUuMC4gPGh0dHBzOi8vQ1JBTi5SLXByb2plY3Qub3JnL3BhY2thZ2U9c2NhbGVzPgoKPGEgaWQgPSAic3RyaW5nciI+IDwvYT4KSGFkbGV5IFdpY2toYW0gKDIwMTcpLiBfX3N0cmluZ3I6IFNpbXBsZSwgQ29uc2lzdGVudCBXcmFwcGVycyBmb3IgQ29tbW9uIFN0cmluZyBPcGVyYXRpb25zLl9fIFIgcGFja2FnZSB2ZXJzaW9uIDEuMi4wLiA8aHR0cHM6Ly9DUkFOLlItcHJvamVjdC5vcmcvcGFja2FnZT1zdHJpbmdyPgoKPGEgaWQgPSAidGlkeXZlcnNlIj4gPC9hPgpIYWRsZXkgV2lja2hhbSAoMjAxNykuIF9fdGlkeXZlcnNlOiBFYXNpbHkgSW5zdGFsbCBhbmQgTG9hZCAnVGlkeXZlcnNlJyBQYWNrYWdlcy5fXyBSIHBhY2thZ2UgdmVyc2lvbiAxLjEuMS4gPGh0dHBzOi8vQ1JBTi5SLXByb2plY3Qub3JnL3BhY2thZ2U9dGlkeXZlcnNlPgoKPGEgaWQgPSAicGx5ciI+IDwvYT4KSGFkbGV5IFdpY2toYW0gKDIwMTEpLiBfX1RoZSBTcGxpdC1BcHBseS1Db21iaW5lIFN0cmF0ZWd5IGZvciBEYXRhIEFuYWx5c2lzLl9fIEpvdXJuYWwgb2YgU3RhdGlzdGljYWwgU29mdHdhcmUsIDQwKDEpLCAxLTI5LiBVUkwgPGh0dHA6Ly93d3cuanN0YXRzb2Z0Lm9yZy92NDAvaTAxLy4+Cgo8YSBpZCA9ICJrYWJsZUV4dHJhIj4gPC9hPgpIYW8gWmh1ICgyMDE3KS4gX19rYWJsZUV4dHJhOiBDb25zdHJ1Y3QgQ29tcGxleCBUYWJsZSB3aXRoICdrYWJsZScgYW5kIFBpcGUgU3ludGF4Ll9fIFIgcGFja2FnZSB2ZXJzaW9uIDAuNS4yLiA8aHR0cHM6Ly9DUkFOLlItcHJvamVjdC5vcmcvcGFja2FnZT1rYWJsZUV4dHJhPgoKPGEgaWQgPSAiSU5NRVQsIDIwMTEiPiA8L2E+CklOTUVULiBfX1JlZGUgZGUgRXN0YcOnw7VlcyBNZXRlb3JvbMOzZ2ljYXMgQXV0b23DoXRpY2FzIGRvIElOTUVULl9fIE5PVEEgVMOJQ05JQ0EgTm8uIDAwMS8yMDExL1NFR0VSL0xBSU1FL0NTQy9JTk1FVCwgcC4gNCwgMjAxMS4gPGh0dHA6Ly93d3cuaW5tZXQuZ292LmJyL3BvcnRhbC9jc3MvY29udGVudC90b3BvX2lmcmFtZS9wZGYvTm90YV9UZWNuaWNhLVJlZGVfZXN0YWNvZXNfSU5NRVQucGRmPgoKPCEtLSA8YSBpZCA9ICIoaWRlbnRpZmljYWRvcikiPiA8L2E+IC0tPgo8IS0tIEtBTk5FTkJFUkcsIEMuIF9fREVTQUdSRUdBw4fDg08gREEgVEVNUEVSQVRVUkEgRE8gQVIgREEgRVNDQUxBIERJw4FSSUEgUEFSQSBIT1LDgVJJQSBQQVJBIE8gU1VMIERPIEJSQVNJTF9fLCAyMDE2LCBwLiAyNC4gVGVzZSAoVENDIHBhcmEgb2J0ZW7Dp8OjbyBkbyBncmF1IGRlIEJhY2hhcmVsIGVtIE1ldGVvcm9sb2dpYSkg4oCTIFVuaXZlcnNpZGFkZSBGZWRlcmFsIGRlIFNhbnRhIE1hcmlhLCBSUywgMjAxNi4gLS0+Cgo8YSBpZCA9ICJNRUVLOyBIQVRGSUVMRCwgMTk5NCI+IDwvYT4KTUVFSywgRC4gVy47IEhBVEZJRUxELCBKLiBMLiBfX0RhdGEgcXVhbGl0eSBjaGVja2luZyBmb3Igc2luZ2xlIHN0YXRpb24gbWV0ZW9yb2xvZ2ljYWwgZGF0YWJhc2VzLl9fIEFncmljdWx0dXJhbCBhbmQgRm9yZXN0IE1ldGVvcm9sb2d5LCBwLiA5MC05MSwgMTk5NC4gPGh0dHBzOi8vYWMuZWxzLWNkbi5jb20vMDE2ODE5MjM5NDkwMDgzMy8xLXMyLjAtMDE2ODE5MjM5NDkwMDgzMy1tYWluLnBkZj9fdGlkPTg2OGM3MThhLTBiOGQtMTFlOC04NTgxLTAwMDAwYWFiMGYyNiZhY2RuYXQ9MTUxNzk1NjQ5MV80MWE1MDVhYjBmNGRmZjViODAxZTdlMzNhYWI1N2I2Nj4KCjxhIGlkID0gIlIiPiA8L2E+ClIgQ29yZSBUZWFtICgyMDE3KS4gX19SOiBBIGxhbmd1YWdlIGFuZCBlbnZpcm9ubWVudCBmb3Igc3RhdGlzdGljYWwgY29tcHV0aW5nLl9fKiogUiBGb3VuZGF0aW9uIGZvciBTdGF0aXN0aWNhbCBDb21wdXRpbmcsIFZpZW5uYSwgQXVzdHJpYS4gPGh0dHBzOi8vd3d3LlItcHJvamVjdC5vcmcvPgoKPGEgaWQgPSAiUlN0dWRpbyI+IDwvYT4KUlN0dWRpbyBUZWFtICgyMDE2KS4gX19SU3R1ZGlvOiBJbnRlZ3JhdGVkIERldmVsb3BtZW50IGZvciBSX18uIFJTdHVkaW8sIEluYy4sIEJvc3RvbiwgTUEuIDxodHRwOi8vd3d3LnJzdHVkaW8uY29tLz4KCjxhIGlkID0gInJhc3RlciI+IDwvYT4KUm9iZXJ0IEouIEhpam1hbnMgKDIwMTYpLiBfX3Jhc3RlcjogR2VvZ3JhcGhpYyBEYXRhIEFuYWx5c2lzIGFuZCBNb2RlbGluZy5fXyBSIHBhY2thZ2UgdmVyc2lvbiAyLjUtOC4gPGh0dHBzOi8vQ1JBTi5SLXByb2plY3Qub3JnL3BhY2thZ2U9cmFzdGVyPgoKPGEgaWQgPSAibWFncml0dHIiPiA8L2E+ClN0ZWZhbiBNaWx0b24gQmFjaGUgYW5kIEhhZGxleSBXaWNraGFtICgyMDE0KS4gX19tYWdyaXR0cjogQSBGb3J3YXJkLVBpcGUgT3BlcmF0b3IgZm9yIFIuX18gUiBwYWNrYWdlIHZlcnNpb24gMS41LiA8aHR0cHM6Ly9DUkFOLlItcHJvamVjdC5vcmcvcGFja2FnZT1tYWdyaXR0cj4KCjxhIGlkID0gIlZBSVNBTEEsIDIwMDIiPiA8L2E+ClZBSVNBTEEuIF9fQXV0b21hdGljIFdlYXRoZXIgU3RhdGlvbiBNQVdTMzAxIElOU1RBTExBVElPTiBNQU5VQUwuX18gcC4gNjYsIDIwMDIuIDxodHRwOi8vd3d3LmVzby5vcmcvZ2VuLWZhYy9wdWJzL2FzdGNsaW0vbGFjaGlyYS9kb2NzL1ZhaXNhbGEvVXNlciUyMEd1aWRlcy9NMDEwMTE0ZW4tQi5wZGY+Cgo8YSBpZCA9ICJWRUpFTiBldCBhbC4sIDIwMDIiPiA8L2E+ClZFSkVOIGV0IGFsLiBfX1F1YWxpdHkgY29udHJvbCBvZiBtZXRlb3JvbG9naWNhbCBvYnNlcnZhdGlvbnM6IEF1dG9tYXRpYyBNZXRob2RzIFVzZWQgaW4gdGhlIE5vcmRpYyBDb3VudHJpZXMuX18gTm9yd2VnaWFuIE1ldGVvcm9sb2dpY2FsIEluc3RpdHV0ZSwgcC4gMTEsIDIwMDIuIDxodHRwczovL3BkZnMuc2VtYW50aWNzY2hvbGFyLm9yZy9hMGNmLzdmNTU4NWMwY2FjZWU2N2U3MmQ1NTgzZmMxYTFkMWY0ZGUyNS5wZGY/X2dhPTIuNjU0NjQyMzguMTgwNjA5NDU4OS4xNTIxODIwNTQ1LTkxNTE0MDc2LjE1MTc5NTM3Njk+Cgo8YSBpZCA9ICJXTU8sIDE5OTMiPiA8L2E+CldNTy4gX19HVUlERSBPTiBUSEUgR0xPQkFMIERBVEEtUFJPQ0VTU0lORyBTWVNURU1fXywgcC4gVkkuMjEsIDE5OTMuIDxodHRwczovL2xpYnJhcnkud21vLmludC9wbWJfZ2VkL3dtb18zMDVfZW4ucGRmPgoKPGEgaWQgPSAiV01PLCAyMDEyIj4gPC9hPgpXTU8uIF9fR3VpZGUgdG8gTWV0ZW9yb2xvZ2ljYWwgSW5zdHJ1bWVudHMgYW5kIE1ldGhvZHMgb2YgT2JzZXJ2YXRpb25fXywgcC4gMSwgMjAxMi4gPGh0dHBzOi8vbGlicmFyeS53bW8uaW50L3BtYl9nZWQvd21vXzhfZW4tMjAxMi5wZGY+Cgo8YSBpZCA9ICJEVCI+IDwvYT4KWWlodWkgWGllICgyMDE2KS4gX19EVDogQSBXcmFwcGVyIG9mIHRoZSBKYXZhU2NyaXB0IExpYnJhcnkgJ0RhdGFUYWJsZXMnLl9fIFIgcGFja2FnZSB2ZXJzaW9uIDAuMi4gPGh0dHBzOi8vQ1JBTi5SLXByb2plY3Qub3JnL3BhY2thZ2U9RFQ+Cgo8YSBpZCA9ICJrbml0ciI+IDwvYT4KWWlodWkgWGllICgyMDE3KS4gX19rbml0cjogQSBHZW5lcmFsLVB1cnBvc2UgUGFja2FnZSBmb3IgRHluYW1pYyBSZXBvcnQgR2VuZXJhdGlvbiBpbiBSLl9fIFIgcGFja2FnZSB2ZXJzaW9uIDEuMTcuIDxodHRwczovL2NyYW4uci1wcm9qZWN0Lm9yZy93ZWIvcGFja2FnZXMva25pdHIvaW5kZXguaHRtbD4KCjxhIGlkID0gIlpBSFVNRU5TS8OdLCAyMDA0Ij4gPC9hPgpaQUhVTUVOU0vDnSwgSS4gX19HdWlkZWxpbmVzIG9uIFF1YWxpdHkgQ29udHJvbCBQcm9jZWR1cmVzIGZvciBEYXRhIGZyb20gQXV0b21hdGljIFdlYXRoZXIgU3RhdGlvbnMuX18gV29ybGQgTWV0ZW9yb2xvZ2ljYWwgT3JnYW5pemF0aW9uLCBwLiAzLTQsIDIwMDQuIDxodHRwczovL3d3dy53bW8uaW50L3BhZ2VzL3Byb2cvd3d3L0lNT1AvbWVldGluZ3MvU3VyZmFjZS9FVC1TVE1UMV9HZW5ldmEyMDA0L0RvYzYuMSgyKS5wZGY+Cgo8YSBpZCA9ICJGQUxMQUhORVpIQUQsIDIwMTIiPiA8L2E+CkZhbGxhaG5lemhhZCwgTVMuIF9fUHJhY3RpY2FsIENvbmNlcHRzIG9mIFF1YWxpdHkgQ29udHJvbF9fLCBvbmUgY2hhcHRlciwgSW4tVGVjaCBPcGVuIFByZXNzLCBEZWNlbWJlciAxOSwgMjAxMi4KPGh0dHA6Ly93d3cuaW50ZWNob3Blbi5jb20vYXJ0aWNsZXMvc2hvdy90aXRsZS9uZXctbW9kZWxzLW9mLWFjY2VwdGFuY2Utc2FtcGxpbmctcGxhbnM+Cgo8YSBpZCA9ICJyaW8iPiA8L2E+CkNodW5nLWhvbmcgQ2hhbiwgR2VvZmZyZXkgQ0ggQ2hhbiwgVGhvbWFzIEouIExlZXBlciwgYW5kIEphc29uIEJlY2tlciAoMjAxOCkuIHJpbzogQSBTd2lzcy1hcm15IGtuaWZlIGZvciBkYXRhIGZpbGUgSS9PLiBSIHBhY2thZ2UgdmVyc2lvbiAwLjUuMTYuIDxodHRwczovL2NyYW4uci1wcm9qZWN0Lm9yZy93ZWIvcGFja2FnZXMvcmlvL2luZGV4Lmh0bWw+Cg==